fietur: UTF-8 und Windows

Beitrag lesen

Hallo, mal wieder vermutlich ein Evergreen-Klassiker:

ich binde auf meiner Seite Text aus einer DB an. Da HTML5 als Codierung UTF-8 verlangt, habe ich den Editor (ich benutze Eclipse) von Windows-1252 auf UTF-8 umgestellt, auch weil ich keine Lust habe, mich immer wieder mit den diversen Inkompatibilitäten herumzuschlagen.

Im Anschluss zeigten dann die aus der DB geladenen Inhalte auf der mit <meta charset="UTF-8"> ausgezeichneten Seite den typischen Umlaute-Müll.

Zunächst dachte ich, das läge an den Inhalten der DB-Tabelle, da diese im Windows CP 1252 in die Tabelle importiert wurden. Als Hotfix für die Ausgabe war utf8-encode() *) erstmal wirksam.

Ich habe in der DB eine neue Tabelle angelegt, die explizit UTF-8-codiert ist; auch die Kollation der Spalten wurde angepasst von latin1_german1_ci zu utf8_general_ci.

Überraschenderweise landen die DB-Texte, wenn man utf8-encode() weglässt, wieder nur mit Umlaute-Müll auf der Webseite. Texte, die nicht aus der DB geladen werden, kommen übrigens korrekt an, auch wenn ich keine HTML entities verwende (inklusive Eurozeichen).

Was läuft da schief und wie behebe ich das?

*) Das PHP-Manual weist darauf hin, dass utf8-encode() eigentlich ein Konverter aus einem ISO-Format in UTF-8 ist, und nicht für die Windows-1252-Konvertierung. Das Euro-Zeichen beispielsweise wird nicht erfasst. Natürlich kann ich dem Vorschlag folgen, und utf8_encode() um die entsprechenden Zeichen erweitern, aber das ist wieder nur ein Workaround für das Problem, dass das UTF-8 irgendwo offenbar doch wieder nur Windows-codiert durchläuft. Dennoch wäre es als zweite Frage interessant zu wissen, ob es eine bessere Möglichkeit gibt, als die Funktion zu erweitern.