PHP-Freuden: json_encode und Zeichenkodierungen

Mal wieder etwas aus der PC-Ecke bzw. für die Fehlersuche in der Programmierung in PHP und JavaScript.

[b]Hintergrund: [/b]
Es gibt eine Benutzermaske als Webinterface, eine Art Warenkorb. Aus einer Auswahlliste können Elemente für den Warenkorb ausgewählt werden. Per AJAX wird dann die Session auf dem Server aktualisiert und der Warenkorb gespeichert. Soweit nichts Ungewöhnliches. Die notwendigen Beschreibungen mit allen Details werden als Rückgabe-Wert in Form eines HTML-Schnippsels geliefert, das erspart einige Verrenkungen in JavaScript.

[b]Fehlerbeschreibung: [/b]
Das Hinzufügen klappt nicht zuverlässig – genauer gesagt: Es wird ordnungsgemäß etwas hinzugefügt, aber es wird nicht richtig angezeigt.

[b]Analyse:[/b]
Die Datenbankabfragen und das Zusammenstellen der Informationen verläuft in PHP alles richtig. Einzig die Funktion “json_encode()” will nicht so ganz wie sie soll – anstelle den Schnippsel und andere Zusatzinfos (z.B. die geschätzte Verfügbarkeit/Lieferzeit nach aktuellem Stand) in ein Objekt zu packen, steht dort nur “null” – also rein gar nichts.

[b]Erklärung/Lösung:[/b]
An wenig prominenter Stelle wird darauf hingewiesen, dass die Funktion zwingen mit UTF-8-konformen Werten gefüttert werden muss. Leider übergeht der Parser ungeeignete Werte einfach und ersetzt sie durch “null” ohne das dabei der Fehlercode gesetzt wird, daher liefert ein Aufruf der Funktion “json_last_error()” auch keinerlei Info darüber was schief gegangen ist. Lösung ist recht simpel: “utf8_encode()” über den Schnippsel jagen und schon funktioniert alles wie erwartet. 😀

Aber bis man auf die Idee überhaupt kommt vergeht ganz ordentlich Zeit – zumal leider fast jede Antwort des Servers leider Beschreibungen mit Umlauten liefert.