AJAX, DOM und Sonderzeichen
Marco
- javascript
Hallo miteinander,
ich suche noch schon den ganzen Nachmittag nach einer Lösung für mein Problem. Mittels AJAX erhalte ich Daten aus einer Datenbank, die ich dann per DOM-Manipulation mit Javascript ausgeben lasse. Nun kommt es aber abundzu vor, daß Sonderzeichen in den Daten enthalten sind. Also z.B. "«". Auf meinem Mac wird dieses Zeichen wunderbar angezeigt. Windows-Rechner stellen es als Fragezeichen in einem auf der Spitze stehenden Viereck da. Es liegt also ein allgemeiner Konflikt bei der Zeichenkonvertierung vor nehme ich an. Das HTML-Dokument selbst hat ISO 8859-1 als Zeichensatz.
Eine mögliche Lösung, die leider nicht zum Erfolg geführt hat, war es, einfach durch das PHP-Skript alle Sonderzeichen mit "htmlentities()" zu kodieren. Doch die mit Javascript erzeugten TextNodes werden nicht noch einmal geparst. Die HTML-Entities erschienen also im Klartext, was ja auch nicht Sinn der Sache ist.
Es hat sich herausgestellt, daß obiges Zeichen durch "String.fromCharCode(171);" auch auf den Windows-Rechnern korrekt dargestellt wird. Ich könnte also mittels regulären Ausdrücken nach den HTML-Entities suchen und sie ersetzen. Das ist aber sehr umständlich und alles andere als dynamisch.
Vielleicht liegt mein Fehler auch ganz woanders. Ein falscher Zeichensatz bei der AJAX-Kommunikation? Eine Unzulänglichkeit beim Anlegen der Datenbank-Inhalte?
Ich bin für jeden Tipp dankbar.
Marco
echo $begrüßung;
Vielleicht liegt mein Fehler auch ganz woanders. Ein falscher Zeichensatz bei der AJAX-Kommunikation? Eine Unzulänglichkeit beim Anlegen der Datenbank-Inhalte?
AJAX verwendet zur Kommunikation UTF-8.
echo "$verabschiedung $name";
hi,
AJAX verwendet zur Kommunikation UTF-8.
Sag mal bitte, wo hastn das her?
--roro
hi,
AJAX verwendet zur Kommunikation UTF-8.
Sag mal bitte, wo hastn das her?
--roro
Die Erfahrung habe ich auch gemacht, z.B: per Ajax gepostete Formularinhalte kommen bei PHP als UTF8 an, ebenso GET-Args. Ich behelfe mir einfach damit, alles in $_GET und $_POST durch utf8_decode() zu jagen, Problem erkannt, Problem gebannt.
Die Erfahrung habe ich auch gemacht, z.B: per Ajax gepostete Formularinhalte kommen bei PHP als UTF8 an, ebenso GET-Args. Ich behelfe mir einfach damit, alles in $_GET und $_POST durch utf8_decode() zu jagen, Problem erkannt, Problem gebannt.
Das hilft mir aber jetzt noch nicht wirklich weiter. Die Anfrage an das PHP-Skript zu übergeben, das dann die Datenbank abfragt, ist ja kein Problem. Dagegen werden die Sonderzeichen, die das PHP-Skript per AJAX zurückschickt auf Windows-Systemen falsch angezeigt. Auf meinem Mac funktioniert alles einwandfrei.
Ich verstehe momentan also noch nicht ganz, wie mir uft8_encode()/utf8_decode() dabei helfen?
Marco
Noch eine Anmerkung. Ich habe gerade folgendes Verfahren genutzt. Im PHP-Skript werden die DB-Werte mittels utf8_encode() transformiert und an das Javascript übergeben. Verwende ich nun keine Javascript-basierte Dekodierungsfunktion, so werden die Sonderzeichen im Mozilla korrekt angezeigt - also dekodiert, während sie im Safari noch kodiert erscheinen, der erst bei Anwendung der Javascript-Dekodierungsfunktion die richtigen Sonderzeichen anzeigt.
Was soll das? Ich versteh es nicht.
Marco
Ich konnte das Problem beheben und was dabei noch viel wichtiger war: die Ursache für das Problem finden. Es ist ein Bug im Safari, der die Kodierung von AJAX-Daten vermasselt. Man fügt also in das PHP-Skript folgende Zeilen ein:
header("content-type: text/html; charset=utf-8");
print(utf8_encode(<AJAX-Daten>));
Auf diese Art und Weise wird auch der Safari dazu bewegt, alle Sonderzeichen richtig zu interpretieren. Nun hoffe ich, daß diese Lösung auch vielen anderen verzweifelten AJAX-Programmiern, wie ich bis vor wenigen Minuten noch eine war, hilft.
Marco
echo $begrüßung;
AJAX verwendet zur Kommunikation UTF-8.
Sag mal bitte, wo hastn das her?
UTF-8 ist die Default-Kodierung für XML, welches bei AJAX im Allgemeinen verwendet wird.
echo "$verabschiedung $name";