Axel Richter: CGI.pm oder Standard schuld?

Beitrag lesen

Hallo,

Das entspricht eben der Zeichenfolge die vom Browser kodiert wird. Bei einem GET-Formular seht ihr es ja ohnedies in der Adresszeile
http://someserver?test=%E2%80%93&send=send

Das passiert aber nur, wenn das Formular in einem HTML-Dokument mit content="text/html; charset=UTF-8" steht.
In einem HTML-Dokument mit content="text/html; charset=ISO-8859-1" würde das Formular
http://someserver?test=%96&send=send
senden.

Deshalb war ich auch mit encodeURIComponent und dem Ö nie erfolgreich. Es wird nämlich als %C3%96 kodiert, was in Perl dann auch nicht mehr zu verwenden ist. escape dagegen macht daraus %D6 und das ist tatsächlich der hexadezimal-Wert des Ö in Latin1.

Richtig. Die Funktion encodeURIComponent() encoded in UTF-8. Die Funktion escape() escaped den ISO-8859-1 Hex-Wert.

Ich frage mich jetzt. Ist der Fehler wirklich bei CGI.pm?

Wenn Du ein GET- bzw. POST-Request mit UTF-8-encoding sendest, also mit Formular und content="text/html; charset=UTF-8" oder mit encodeURIComponent(), muss der Server das dann natürlich auch als UTF-8 auswerten wollen. Kann CGI.pm das? Das sollte in der Doku dazu stehen. Von allein wird es das nicht machen. Das wirst Du irgendwo angeben müssen, wenn es überhaupt geht.

viele Grüße

Axel