hi,
Jetzt die Frage, was habe ich für Möglichkeiten, die »schlechten« zu erkennen, um sie anders zu behandeln?
Im Grunde sowas wie:
if ($blöderString wurde aus ISO-8859-1 url-encoded) {
behandle ihn so;
}
else { behandle ihn anders; }
Also nochmal: Alles was mit dem Referrer reinkommt ist us-ascii. %F6 ist ascii, %C3%B6 ist auch ascii. Mit dem Percent-Encodung sind lediglich die bytes umgeschrieben. URI::Escape::uri_unescape() stellt Dir diese bytes wieder her, erst dann hast Du bytes, die Zeichen darstellen. Wenn Du das speichern willst, nimm das so wie es ist, entweder den Referrer komplett oder geparst und umgewandelt in die bytes. Zum Speichern keine Zeichencodierung umwandeln, das kannst Du in der Darstellung immer noch machen. Den Referrer kannst Du, egal ob Dein Frontend mit iso oder utf8 erstellt wurde, als "a href" klickbar machen, denn der ist ja ascii und wird immer so aussehen, wie der reinkommt.
Wenn Du jedoch den Referrer erst zerlegst und das Percentencoding rückgängig machst, ja dann hast Du bytes, die Zeichen in unterschiedlicher Kodierung darstellen (könnten, das Meiste ist utf8). Mach die Umschaltung zur Darstellung einfach per Hand und entscheide optisch. Falls Du das automatisieren willst, musst Du ein bischen mehr tun, da ist anhand aufeinanderfolgender bytes feststellbar, welche Kodierung vorliegt. Ob sich dieser Aufwand lohnt, musst Du selbst entscheiden.
Hotti