Sven: CGI.pm oder Standard schuld?

Beitrag lesen

Hi!

Vielleicht kennt sich jemand mit UTF und dem HTTP-Standard gut genug aus.

Probiert einmal ein Formular aus, gebt den Gedankenstrich (Alt+150) in ein Textfeld ein und schickt es an den Server und lest den Parameter mit Perl aus (egal ob CGI.pm oder die handgestrickten Zeilen).

Ihr werdet nur noch das lesen können: –

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

Da wird einfach paarweise genommen und zurückgewandelt in ein Byte.

Was aber gemacht werden müsste, ist ein Dekodieren nach UTF8, denn das ist dieser 3-Byte-Code tatsächlich der Gedankenstrich.

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.

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

Soweit ich weiß, gibt es ja wirklich gewisse Wertbereiche in UTF8, die aus 1-, 2- oder 3-Bytes bestehen. Das wird dann wohl nicht korrekt ausgewertet.

gruß
Sven