Umlaute in AJAX klappen nicht im Internet Explorer
Freitag, 8. Mai 2009
Geschrieben von Armin Vieweg
Wenn Ihr schon mal versucht habt einen AJAX-Request mit Umlauten oder Sonderzeichen auszuführen, dürfte das zwar im Firefox Browser funktioniert haben, jedoch im Internet Explorer gescheitert sein. Hier der Grund dafür und die einfache Lösung.
In letzter Zeit erwische ich mich immer häufiger, wie ich über den Internet Explorer, egal in welcher Version fluche. Dieses Mal war ein Zeichensatzproblem der Grund.
Ich hatte eine Input-Box und wollte den Inhalt mit der AJAX-Library jQuery an ein PHP-Script schicken, dass dann eine Datenbank-Abfrage macht. Hat in jedem Browser wunderbar funktioniert, auch dem Internet Explorer - bis ich dann mal "Köln" eingegeben habe und im Firefox Ergebnisse zurückgekommen sind und im Internet Explorer so getan wurde als würde es diese Stadt in der Datenbank nicht geben.
UTF8-Decode
Dieser Befehl stand noch vor der mySQL-Query.
$q = utf8_decode($q);
Kommentierte ich ihn aus funktionierte die Anfrage im Internet Explorer, dafür aber nicht mehr in Firefox. Die logischste Schlussfolgerung wäre also eine Browserweiche in PHP gewesen, auf die ich aber lieber verzichten wollte. Etwas intensiver googeln brachte dann auch die Lösung ans Licht.
URI-Encode
In dem URI-Encoding lag der Schlüssel. Firefox codiert die Daten mit URI-Encode, der Internet Explorer nicht. Der IE schickt das "ö" als "ö".
Firefox macht aber z.B. aus dem hier:
Dieser Satz hat Leerzeichen
das hier:
Dieser%20Satz%20hat%20Leerzeichen
In PHP gibt es auch dafür einen eigenen Befehl:
$string_url = rawurlencode($string);
URI-Encode in JavaScript (encodeURIComponent)
Diesen Befehl gibt es in JavaScript ebenfalls und lautet encodeURIComponent.
In einem jQuery-AJAX-Aufruf sieht das dann z.B. so aus:
Der Unterschied der Zeichencodierung ist im Internet Explorer 8 nicht mehr vorhanden, egal ob man sich im Kompatibilitätsmodus (zum IE7) befindet oder nicht.
Mich wunderte nur, dass jQuery diesen Befehl nicht schon integriert hatte. Auf Firefox wirkt sich der Befehl im Übrigen nicht aus. Ich hoffe, dass ich damit all denen helfen konnte, die auch mit AJAX und Umlauten im Internet Explorer zu kämpfen hatten.