Es gibt mehrere Möglichkeiten wie man auf Webseiten gelangt. Entweder durch direkte Eingabe einer URL im Adressfeld des Browsers, oder durch ein Link auf eine andere Webseite. Je nach verwendeten Browser führt die Eingabe der URL in der Adresszeile dazu, das die URL entweder als UTF-8 oder ISO 8859-1 kodiert wird. Firefox kodiert die URL anscheinend nach ISO-8859-1/Latin-1 wenn man die URL manuell eingibt. Soweit ich mich erinnern kann meine ich gelesen zu haben, dass der Browser die URL abhängig vom Server Header kodiert. (Die Frage die ich mir gerade stelle. Woher soll der Browser beim allerersten Aufruf einer Webseite Wissen in welcher Kodierung diese vorliegt?)
z.B. wird ein Ä in UTF-8 mit %C3%84
kodiert und in ISO 8859-1 mit %C4
Die ganze Problematik ist nun, das die die meisten Webapplikationen oder PHP-Scripte die URL in einer bestimmten Kodierung erwarten. Entweder UTF-8 oder ISO-8859-1. Der Webserver wandelt die URL in den Zeichensatz um, die er anhand der kodierten Umlaute erkennt. Enthält die URL z.B. ein %C4
wandelt der Webserver den String in den ISO-8859-1 Zeichensatz um.
Einige Tests haben ergeben, das es zu Problemen kommt wenn die Webseiten/Scripte auf UTF-8 ausgelegt sind. Das kann man eigentlich direkt bei einigen Webseiten mit dem Firefox testen. man suche sich Webseiten die Suchfunktionen bieten die diese per GET erhalten. einfach mal manuell in der URL oben ein Ä oder ü eingeben und Enter drücken. Per Formular funktioniert alles immer wunderbar. Man sollte hier wissen, das der Firefox die URL dann nicht umwandelt.
Damit eine Anwendung also zuverlässig arbeitet, sollte sie also den Zeichensatz der URL erkennen und entsprechend konvertieren. Ein Lösungsansatz ist z.B. hier zu finden.
Ein anderer Ansatz könnte z.B. sein den Zeichensatz über den QUERY_STRING zu ermitteln um dann eine Konvertierung vorzunehmen.
- URL-Encoding auf wikipedia.de
- RFC 1738 – (Uniform Resource Locators (URL) specification)
- RFC 2396
- RFC 3986