Gunther: Character Encoding - UTF-8 - multibyte String-Funktionen

Beitrag lesen

Hi,

Das kann dir aber egal sein, so lange der Browser den Request vernünftig kodiert sendet.

Nein, kann es imho eben leider nicht.

Lasse ich mir dann bspw. per Script die $_SERVER Variablen anzeigen, dann sind $_SERVER[REQUEST_URI] und $_SERVER[QUERY_STRING] immer kodiert, während $_SERVER[PATH_INFO] im Klartext angezeigt wird.
Beispiel:
$_SERVER[REQUEST_URI]: /Umlaute:%20%C3%A4%C3%84%C3%B6%C3%96%C3%BC%C3%9C%C3%9F%20Preis:%20%E2%82%AC%2030,-
$_SERVER[PATH_INFO]: /Umlaute: äÄöÖüÜß Preis: € 30,-

Das hat aber nichts mit UTF-8 vs. ISO-8859-1 zu tun, sondern ist lediglich URL-encoded vs. "plain text".

Ja, schon richtig. Nachfolgend ein hoffentlich etwas besseres Beispiel zur Verdeutlichung meines Problems (zumindest erstmal eins davon).

Fall 1:
Habe ich auf einer meiner korrekt als UTF-8 kodierten Seiten einen Link à la .../€?q=€
dann wird dieser_komplett_UTF-8 kodiert übertragen/ gesendet.
Ergebnis (URL kodiert) REQUEST_URI = /%E2%82%AC?q=%E2%82%AC

Fall 2:
Tippe ich genau denselben Request aber manuell in die Adresszeile des Browsers, sieht das Ergebnis (URL kodiert) so aus REQUEST_URI = /%E2%82%AC?q=%80

Der "Wahnwitz" daran ist, dass der Pfadteil nachwievor UTF-8 kodiert ist, aber der Query String dann nicht mehr, sondern wie in diesem Beispiel dann auf einmal in Windows-1252.

Das Problem ist dann ja u.a. auch, dass eine Erkennung der Kodierung per Script defacto nicht möglich ist, da '%80' in vielen Kodierungen "gültig" ist. Und wie dedlfix ja schon angemerkt hat, würde hier nur eine "Sinn-Erkennung" funktionieren, was per Script imho (fast) unmöglich ist.

Oder hast du eine Idee/ einen Vorschlag zur Lösung des Problems?

BTW: Ich habe aufgrund dieser Probleme nochmal generell über Sonderzeichen (spez. Umlaute) in der URL nachgedacht. Ist es unter dem Gesichtspunkt der Usability nicht sehr "unfreundlich", denn alle User, die keine dt. Tastatur (bzw. dt. Tastaturlayout) haben, tun sich ja dann sehr schwer mit einer manuellen Eingabe, oder? Selbst wenn man die alternative Schreibweise (also bspw. "ae" anstelle von "ä") ebenfalls akzeptieren würde (z.B. mit dem rel="canonical" Attribut), müsste der jeweilige User das ja auch erstmal wissen. Oder kann man durchaus davon ausgehen, dass eh 99,xx% aller Besucher über SuMa- und sonstige Links kommen?

Gruß Gunther