Axel Richter: CGI.pm oder Standard schuld?

Beitrag lesen

Hallo,

Richtig. Die Funktion encodeURIComponent() encoded in UTF-8. Die Funktion escape() escaped den ISO-8859-1 Hex-Wert.
Stimmt nicht ganz und da liegt das Problem.
escape liefert beim Gedankenstrich eben nicht den Latin1-Wert (wäre %96), sondern %u2013 - also u für unicode und dann den Wert 8((

Aua, das ist böse, das sollte so nicht sein. http://www.byteshift.de/javascript-1415/CoreGuideJS15/fcns.html#1012712
...
escape function returns the hexadecimal encoding of an argument in the ISO Latin character set.
...
aber auch
...
The escape and unescape functions do not work properly for non-ASCII characters and have been deprecated. In JavaScript 1.5 and later, use encodeURI, decodeURI, encodeURIComponent, and decodeURIComponent.
...

Dann wirst Du es mit JavaScript also _grundsätzlich_ in UTF-8 und mit encodeURI() erledigen müssen.

Was wenn der Server gemischte Anfragen bekommt?

Das sollte man verhindern. Das kann ja eigentlich nur passieren, wenn der Ersteller der Anfrage, also bei einer HTTP-Anfrage vom Browser, der Ersteller der Web-Seite, das so macht, weil er einerseits dem Formular sagt, dass es ISO-Latin ist und andererseits mit JavaScript UTF-8 sendet.

viele Grüße

Axel