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