«

»

Jan 17 2006

Beitrag drucken

AJAX und das Character Encoding

Heute nacht habe ich ja mit meinem nicht unbewusst etwas bissigen Artikel über den derzeit ausbrechenden Aktionismus rund um die SQL-Query-Optimierung für die Verhältnisse dieses Blogs eine Lawine losgetreten. So viele Kommentare in so kurzer Zeit zu einem Topic habe ich jedenfalls bisher noch nicht gehabt ;). Dabei ist heute früh allerdings auch ein wichtiger Bug offenbar geworden, der sich wohl in die meisten deutschsprachigen Blogs einnisten dürfte, die die LiveComment-Funktion aus K2 oder Binary Blue verwenden – Umlaute werden in Hieroglyphen „aufgelöst“.

Erste Maßnahme war die testweise Umstellung des Blog-Zeichensatzes auf UTF-8, obwohl mir das europäische ISO-8859-15 deutlich lieber wäre. Damit sind die Kommentare jedenfalls wieder lesbar, und auch die Seiteninhalte bocken nicht weiter rum. Seit ich heute abend zu Hause bin, habe ich nun nach der Ursache für das Problem gesucht und möchte an dieser Stelle meine Erkenntnisse der Allgemeinheit zur Verfügung stellen.

  1. Sendet man Kommentare auf klassische Weise ab, wird das Character encoding verwendet, auf das das Blog konfiguriert ist. Aus diesem Grund stolpern „normale“ Blogger nicht über diese Falle.
  2. Verwendet man hingegen LiveComments, kommt eine Technik namens AJAX zum Zuge. AJAX ist eine neue hippe Wortschöpfung und hat im Webzusammenhang nichts mit einem Scheuermittel zu tun, sondern fasst grob vereinfacht die Anwendung von Javascript und XML und einem speziellen sogenannten „XMLHttpRequest-Objekt“ zusammen. Mehr müssen die meisten über die Bedeutung des Worts gar nicht wissen.
  3. Dieses AJAX sendet, wenn es für das Verschicken von Formulardaten zum Server genutzt wird, die Formulardaten grundsätzlich und unabwendbar in UTF-8-Codierung an den Server.
  4. Auf Serverseite kommen die Daten inkl. Umlauten heile an. Sie werden auch intakt in der Datenbank als neuer Kommentar gespeichert.
  5. Erst beim Auslesen der Kommentare und beim Zusammenbau der Website eines Artikels geht der Unterschied zwischen eingestelltem Encoding und tatsächlichem Encoding der Kommentare dann in die Hose – das ist quasi so, als wolle man seinen Benziner zur Hälfte mit Diesel tanken – das holpert beim Fahren auch sehr schön 😉
  6. Da man den Daten eines Kommentars nicht „an der Nase“ ansieht, in welchem Encoding sie gespeichert wurden, kann man sie nicht einfach wieder ins „richtige“ Encoding transformieren, denn dadurch könnten genauso gut versehentlich auch Daten ins unleserliche konvertiert werden – den Effekt haben in den letzten zwei Stunden sicherlich einige Besucher hier erleben dürfen 😉

Momentan einziger Workaround, den ich zuverlässig ans Laufen bekommen habe – UTF-8-Codierung unter Optionen/Lesen einzustellen und eventuell noch nicht passende Kommentare auf UTF-8 umformatieren. Wenn mir jemand nen Tipp gibt, wie ich schon in der comments-ajax.php die ankommenden Kommentardaten, die mit AJAX versendet wurden, ins richtige Encoding bringe, bau ich das gerne ein – denn ich will mein gutes altes ISO-8859-15 auch zurück….

Permanentlink zu diesem Beitrag: http://www.4null4.de/76/ajax-und-das-character-encoding/

10 Kommentare

Zum Kommentar-Formular springen

  1. Manu

    denn ich will mein gutes altes ISO-8859-15 auch zurück

    Warum? Altmodisch? 😛

    Gut, nicht ganz so qualifizierter Beitrag, aber ein kleines Fünkchen Wahrheit steckt dahinter. 😉

  2. Der Blogger

    nein, altmodisch eigentlich nicht – zumindest nicht in dieser hinsicht 😉
    es ist vielmehr so, daß dies halt das in europa übliche character encoding ist, wenn auch support für das eurozeichen erwünscht ist. das ist alles….

  3. Käpt’n Knoppaz

    es ist vielmehr so, daß dies halt das in europa übliche character encoding ist, wenn auch support für das eurozeichen erwünscht ist.

    Das Eurozeichen ist doch auch in UTF-8 drin. Das ist doch gerade der Vorteil an Unicode: Eine Kodierung, die alles unterstützt, anstatt viele verschiedene.

  4. J.

    Ich hatte das Problem auch – ich hab die Datei, die von AJAX eingebunden wird, mit nem Header versehen (iso-8859-1) und lasse ein htmlentities über die ankommenden Sachen aus der Datenbank laufen (die übrigens auf iso-8859-15 läuft…). Ich glaube, das ist Pfusch, aber ich versteh diesen ganzen Kram mit der Kodierung eh nicht richtig, und so läufts… Bei meinem Xampp zuhause gabs von anfang an übrigens keine Probleme

  5. Stefan

    Gibt doch die PHP-Funktion utf8_decode:

    (PHP 3>= 3.0.6, PHP 4 , PHP 5)
    utf8_decode — Converts a string with ISO-8859-1 characters encoded with UTF-8 to single-byte ISO-8859-1.
    Description
    string utf8_decode ( string data)
    This function decodes data, assumed to be UTF-8 encoded, to ISO-8859-1.

    Macht also aus den per Ajax übermittelten Unicode-Zeichen wieder saubere ISO-Zeichen (1 oder 15 dürfte sich nichts nehmen)

  6. Thor oder Odin

    Das verflixte Problem mit der Übertragung von Umlauten mittels XMLHttpRequest geht mir auch auf die nerven.

    Vielleicht kriege ich das ja mit der utf8_decode gelöst

  7. a/m

    soucis ajax

  8. a/m

    é è ç

  9. Yannick

    Ich hatte das selbe Problem. Ich habe es mit der PHP Function iconv gelöst. Das klappt ganz gut. Allerdings suche ich immernoch nach einer reinen JS Lösung. Wenn jemand eine gefunden hatt, würde ich mich über eine E-Mail freuen. E-Mail Adresse steht auf meiner Website.

  10. Stan

    Hallo Zusammen,

    eine js Lösung ist relativ einfach: mithulfe von js relace() funktion kann man die Umlaute mit der URL-Verschlüsselung umwandeln: für Ä = %C4 etc.

    Ich würde mich aber für eine Serverlösung freuen. Ich will nicht denken, wie lange der Browser brauchen wird bei längeren Texten und größeren Formularen…

    Grüße
    Stan

Kommentare sind deaktiviert.