Sven Rautenberg: Problem mit Umlauten in URL- Parametern

Beitrag lesen

Moin!

die Seite http://remso.de/weschnitztal.htm ist UTF-8 kodiert

Nein, ist sie nicht.

Weder sagt der Server, dass sie das ist, noch stehen dort, wo Umlaute sind, UTF-8-Bytes drin.

Das ist alles reines ISO-8859-1.

Abgesehen davon ist interessant, dass die Meta-Weiterleitung mit den Entities falsch weiterleitet, der Link ohne Entities korrekt.

Und dass keine von beiden URLs korrekt url-encodiert ist! Leerzeichen haben in URLs nix verloren.

Trotz UTF-8 wird das Wort F%FCrth übergeben, also ISO-8859-1, das hat mich irritiert. Firefox ignoriert die Zeile
<meta http-equiv="content-type"     content="text/html;charset=UTF-8">
Wie kann ich per HTML- Datei sagen, dass ich UTF-8 möchte?

Gar nicht, wenn der Server was anderes sagt.

Das aufgerufene PHP- Folgeprogramm

Dann ist es zu spät.

URLs sind leider, was die Auszeichnung des verwendeten Encodings angeht, ganz schlecht aufgestellt. Jede Webseite kann per Meta-Element und HTTP-Header das verwendete Encoding mitteilen - URLs können das nicht.

Der einzige Teil einer URL, bei dem das Encoding festgelegt ist, ist der Domainteil. Das DNS-System schert sich nur um einen kleinen Teil von ASCII, nämlich a-z, 0-9 und '-' - und wenn Sonderzeichen ins Spiel kommen (Stichwort "Umlautdomains"), ist festgelegt, dass Unicode als Encoding-Basis verwendet wird, und nach einem festen Schema wird daraus wieder DNS-kompatibles ASCII gemacht.

Der Rest der URL ist frei definierbar, bzw. genauer gesagt: Es ist Serversache. Und damit Vereinbarungssache. Deshalb sind Sonderzeichen in URLs nach Möglichkeit zu vermeiden - mindestens im Pfad und Dateinamen. Denn hier spielt ziemlich viel Zeugs rein, welches zu unerwarteten Unverträglichkeiten führen kann. Ich will nicht zu sehr ins Detail gehen, aber angenommen, eine Datei heißt "tüll.php" - welches Encoding wird für das Ü genommen? Hängt davon ab, was das Dateisystem des erstellenden Rechners nimmt. Was passiert mit dem Ü beim FTP-Transfer auf den Produktivserver? Wie interpretiert der Server das Ü in der URL? Paßt diese Interpretation zum Encoding des Dateisystems? Und so weiter...

Lediglich als URL-Parameter hat man das Problem eines eventuell dahinterliegenden unverträglichen Dateisystems nicht, das ist alles komplett Sache des HTTP-Servers bzw. des auswertenden Programms. Trotzdem muß man hier einmal festlegen, welches Encoding denn nun tatsächlich verwendet werden soll. Und dieses Encoding muß dann auch konsequent urlencoded maskiert sein! UTF-8-Umlaute bestehen dann also zwingend aus zwei %-Sequenzen, die die zwei UTF-8-Bytes dieser Zeichen darstellen. Nur dann besteht keinerlei Mißverständnismöglichkeit, weil der Server die volle Kontrolle über seine Bytes behält.

Das URL-Encoding hat für JEDE ausgegebene URL zu erfolgen. Darüber hinaus hat ggf. auch noch ein HTML-Encoding zu erfolgen, sollte die URL im HTML-Kontext ausgegeben werden.

Beispiel:
gewünschte URL: index.php?titel=Ä&utitel=ä (als UTF-8)
URL-Encoding:   index.php?titel=%C3%84&utitel=%C3%84
HTML-Encoding:  index.php?titel=%C3%84&amp;utitel=%C3%84

- Sven Rautenberg

--
"Love your nation - respect the others."