dedlfix: Kodierungsprobleme...

Beitrag lesen

echo $begrüßung;

ich bin verzweifelt, ich kann keine vernünftige Lösung meines Problems finden, nur Workarounds..

Dann liegt es wohl tiefer als du annimst.

Die ganze Seite wird aus mehreren Gründen im UTF-8 Kontext dargestellt.

UTF-8 ist schon mal nicht verkehrt, wenn man AJAX macht. Allerdings ist UTF-8 kein Kontext sondern eine Kodierung wie beispielsweise ISO-8859-1 oder ASCII. Wenn UTF-8 wirklich durchgängig und korrekt deklariert verwendet wird, sollte es damit auch kein Problem geben.

Du musst dir an jeder Stelle im Klaren sein, welche Kodierung vorliegt. Das betrifft die Verarbeitung in den Systemen selbst und die Kommunikation zwischen zweien. Wenn Unklarheiten bestehen, sollte man denen auf soweit auf den Grund gehen, dass man sich die Bytes möglichst direkt ansieht, ohne dass irgend ein System bei der Darstellung (fehl-)interpretierenderweise das Kontrollausgabeergebnis verfälscht.

Und jetzt kommt das Problem.

Das ganze System ist ja schon recht komplex geworden. Versuch doch mal, die Komplexität zu verringern und von vorn im Kleinen anzufangen, und mit so wenig wie möglich Code das Problem nachzustellen, bzw. das System so aufzusetzen, dass das Problem gar nicht erst auftritt.

Wenn ich versuche die Formulardaten einzukodieren (aus meiner Sicht ist es nicht logisch, da die Seite schon im UTF-8 Kontext dargestellt wird und daher müssen alle Eingaben auch einkodiert sein),

Eine Kodierung ist immer vorhanden, die Frage ist nur: welche? "Einkodieren" gibt es nicht, höchstes Umkodieren von einer Kodierung in eine andere (im Fehlerfall möglicherweise auch nur eine, dafür vielleicht doppelt angewendet).

Ein paar Beispiele, die tatsächliche Zeichen werden mit Charcodes ersetzt, da ser automatische Filter von selfhtml sie leider nicht durchläßt.

Eingabe: üüüü
JSON: {reason":"üüüü"}
Rückwert: üüüü

195-188 oder C3-BC in Hex ist ein ü. Soweit so gut.

Eingabe: ÜÜÜÜ
JSON:{"reason":"Ã Ã Ã Ã "}
Rückgabe: Ã Ã Ã Ã 

195-32 oder C3-20 in Hex ist keine gültige UTF-8-Sequenz.

Falls man untypische Zeichen eingibt, wird JSON nicht interpretiert.

Mit untypisch meinst du vermutlich Zeichen außerhalb von ASCII.

Die funktion utf8_encode für Javascript wurde aus selfhtml.org entnommen. Ich teste meine Anwendung nur mit den letzten Versionen von Firefox 3 und Explorer 7.

Schon seit einigen Jahren und damit auch frühere Versionen kommen im Allgemeinen mit der Zeichenkodierung gut zurecht, wenn sie denn ordentlich ausgezeichnet ist.

Wo kann das Problem sein?

Wenn du den Weg des kleinstmöglichen Nachbauens nicht gehen willst, dann solltest du zumindest einige der üblichen Tools und Hilfsmittel verwenden, um Klarheit in das jetzige Verhalten zu bringen.

Übliche Verdächtige sind

  • die Content-Type-Header der HTTP-Kommunikation, für deren Überwachung sich die livehttpheaders-Erweiterung im Firefox gut eignet. Für den IE wird es sowas sicher auch geben. Wenn du es aber das System einmal korrekt aufgesetzt hast, sollte es keine Unterschiede zwischen den Browsern mehr geben.
  • unter PHP bin2hex(), um sich Bytewerte auszugeben. (echo chunk_split(bin2hex($delinquent), 2, ' '); zur übersichtlicheren Darstellung)
  • Hexeditoren oder Hexdumps für Werte in Dateien (auch in Quellcode).

Versuche auch eine Kommunikation ohne AJAX und JSON, dann JSON-kodiert, dann AJAX dazu. Jeweils immer mit den gleichen Beispieldaten, die auch mal Zeichen außerhalb von ISO-8859-1 enthalten.

echo "$verabschiedung $name";