Marco: AJAX, DOM und Sonderzeichen

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

  1. 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";

    1. hi,

      AJAX verwendet zur Kommunikation UTF-8.

      Sag mal bitte, wo hastn das her?

      --roro

      1. 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.

        1. 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

          1. 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

            1. 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

      2. 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";