molily: AJAX und Umlaute

Beitrag lesen

Hallo,

Man muß die gesendete Zeichenkette mit escape() umwandeln...

Bitte nicht - damit handelst du dir arge Probleme ein.

Zunächst einmal: Ja, bei POST-Anfragen mit XMLHttpRequest wird standardmäßig UTF-8 als Kodierung für die POST-Daten verwendet. Ich wüsste auch nicht, wie man das ändern kann. Korrekt wäre ein Header Content-Type: application/x-www-form-urlencoded; charset=..., aber das beeindruckt die Browser nicht, sie benutzen trotzdem UTF-8.

Warum du auf keinen Fall escape() verwenden solltest: Wenn jemand Zeichen außerhalb von ISO-8859-1 eingibt (z.B. typographische Anführungszeichen, die auch gerne durch Programme automatisch eingefügt werden), dann werden diese durch escape() mit %uXXXX maskiert. XXXX ist dabei die hexadezimale Unicodenummer des Zeichens.

escape("Er sagte: „Hallo!“");
bringt z.B.
Er%20sagte%3A%20%u201EHallo%21%u201C

Jagst du dann dein urldecode drüber, bekommst du
Er sagte: %u201EHallo!%u201C

Damit hast du Zeichensalat.

Wie kriege ich die Umlaute sicher über AJAX gesendet ?

Wie gesagt, am besten stellst du auf UTF-8 um. Dann kannst du, wenn du unbedingt willst, serverseitig immer noch eine Umkodierung zu ISO-8859-1 vornehmen. Bei der gehen natürlich u.U. Zeichen verloren - aber koordiniert, ohne dass wie bei escape() Unsinn dabei herauskommt.

Mathias