Zeichensätze und XAJAX
In unseren Breitengraden ist ISO-8859-1 der gängige Zeichensatz - XMLHttpRequests, auf denen die gesamte asynchrone Übertragung basiert, nutzen hingegen standardmäßig UTF8, egal mit welchem Zeichensatz die Website erstellt wurde. Das führt auf Kurz oder Lang bei vielen Leuten zu Problem, dabei ist die Lösung doch so einfach.
Beim Start neuer Projekte sollte man sich darüber bewusst sein, dass das Leben mit UTF8 sehr einfach sein kann und weniger Probleme bereitet als man anfangs vielleicht glauben mag. Wichtig ist dabei, dass wirklich alle Komponenten UTF8 kodiert sind, ansonsten stößt man sehr schnell auf Probleme. Sollte man also vor der Wahl stehen, ist UTF8 in der Regel die bessere Wahl.
Man muss sich dabei aber stets über folgende Dinge bewusst sein:
Welchen Zeichensatz hat die Datenbank?
Welcher Zeichensatz wird bei SQL-Queries verwendet?
Welcher Zeichensatz wird in den Templates verwendet?
Enthält der PHP Code statische Texte?
Den Zeichensatz der Datenbank und einzelner Tabellen kann man auf UTF8 umstellen, auch wenn der Server ansonsten auf ISO-8859-1 (latin1) konfiguriert ist. Dabei gilt zu beachten, dass die Connection-Collation - sprich die Übertragung der Daten bei SQL-Queries - auch in UTF8 erfolgt.
Direkt nach dem Verbinden zur Datenbank empfiehlt sich daher folgendes:
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'"); mysql_query("SET CHARACTER SET utf8"); mysql_query("SET SESSION character_set_results = 'UTF8'");
Bei statischen Texten in PHP-Dateien, HTML-Dateien oder zB Smarty-Templates müssen dementsprechend auch alle Zeichen UTF8 kodiert sein. Moderne Editoren unterstützen i.d.R. alle die Möglichkeit die Dateien in UTF8 zu speichern. Aber Vorsicht! Beim Speichern fügen einige Editoren ein Byte-Order-Mark (UTF8 BOM) am Anfang der Dateien ein. Dadurch kann die XAJAX Response nicht verarbeitet werden (Whitespaces!). Im Zweifelsfall hilft eine HEX-Ansicht der Dateien aus, um festzustellen ob ein unerwünschtes BOM eingefügt wurde. Dieses Zeichen kann man gefahrlos entfernen.
Zeichensätze konvertieren
Nun, wenn es immer noch ein anderer Zeichensatz sein soll, oder sogar muss, bietet Xajax Funktionen um die übergebenen Daten vom Client automatisch umzuwandeln.
$xajax = new xajax(); $xajax->setCharEncoding('ISO-8859-1'); $xajax->setFlag("decodeUTF8Input",true);
Mit setCharEncoding() wird zu allererst der Zeichensatz definiert, mit dem die Rückgaben an den Client erfolgen. Das Flag decodeUTF8Input veranlasst Xajax alle eingehenden Daten automatisch in den angegeben Zeichensatz zu wandeln. Dazu wird intern je nach Verfügbarkeit entweder iconv, mb_convert_encoding oder utf8_decode verwendet.
Mit diesen beiden Zeilen kann Xajax nun auch schnell in bereits vorhandene Projekte mit anderen Zeichensätzen integriert werden.
Oliver K. sagt
am 10. Mai 2008 @ 07:48
Ich sehe da gerade ein Problem bereits in den Examples von Xajax. Als Beispiel nehme ich mal die “signup.php” aus den Examples. Mit dem Echo Befehl wird darin ein XML Encoding UFT-8 an den Browser gesendet. Der nachfolgende Code kann aber nicht UTF-8 sein. Da ansonsten der Parser von PHP Probleme macht, welcher in den Grundeinstellungen (bei den meisten Providern) unter ISO-8859-1 seine Dateien parst.
Meistens ediert man die Dateien unter Windows Charset 1252. Wenige achten darauf einen Editor zu nehmen der einem das verwendete Charset anzeigt. Angenommen ich editiere nun die Signup in UTF-8 was wird wohl der Parser von PHP dazu sagen?
q_no sagt
am 5. August 2008 @ 12:29
Der PHP parser wird da rein garnichts zu sagen. Die PHP Syntax besteht nur aus ASCII Chars die auch bei UTF8 identisch sind. Alle Inhalte, Strings, usw usw können (bzw müssen in dem Fall) UTF8-Kodiert sein und werden von PHP so 1:1 wiedergegeben. Bei StringFunktionen wie zB htmlenities() muss man nur die Kodierung als weiteren Parameter übergeben, damit diese zuverlässig funktionieren.
Dem Parser ist dies wie gesagt total egal.
[PHP] Problem mit Charset sagt
am 10. Mai 2010 @ 16:43
[...] dass XMLHttpRequests prinzipiell UTF-8 nutzen. Ein wenig Lektüre und eine Lösung für Dein Problem: Zeichensätze und XAJAX Red nicht – Geh los! Zitieren [...]
J.S. sagt
am 4. September 2010 @ 20:46
Gutes Projekt, aber leider wenig Infos.
Wird XAJAX noch weiterentwickelt?
Man hört überhaupt nichts mehr von der derzeitigen Entwicklung.
Ich würde mich gern in XAJAX einarbeiten, aber nur wenn ich weiss, dass ich das auch auf lange Sicht nutzen kann.
Wie ich sehe sind die Infos doch sehr knapp, die letzten Einträge sind noch von 2008.
Wie sieht es mit der Version 0.6 aus, wird es die noch geben?
Gibt es dafür schon eine Dokumentation / Beschreibung?
Schöne Grüße J.S.
q_no sagt
am 4. September 2010 @ 20:58
Ja, Xajax wird noch aktiv weiterentwickelt. Vor ein paar Tagen ist gerade die erste Beta von Xajax 0.6 erschienen.