Rolf B: 2. Umlauteproblem

Beitrag lesen

Hallo Pit,

habe gerade mal wieder ein bisschen experimentiert:

$x = "Hällo Wörld";
echo strlen($x) . " - $x\n";

$y = mb_convert_encoding($x, "UTF-8", "ISO-8859-1");
echo strlen($y) . " - $y\n";

Diese Sourcecode-Datei habe ich einmal in ISO-8859-1 und einmal in UTF-8 gespeichert.

Ergebnis für ISO-8859-1 Sourcecode:

11 - H#llo W#rld
13 - Hällo Wörld

D.h. PHP hat beim Ausgeben auf die Konsole eine UTF-8 Eingabe erwartet (weil das das default-charset meiner php.ini ist), die Ausgabe des nicht übersetzten Strings (11 Stellen) ging schief und die Ausgabe des übersetzten Strings (13 Stellen weil ä und ö 2 Bytes pro Zeichen brauchen) gelang.

Ergebnis für UTF-8 Sourcecode:

13 - Hällo Wörld
17 - Hällo Wörld

D.h. die unübersetzte Ausgabe war jetzt im erwarteten Format und der Versuch, das nochmal zu codieren, lieferte naturgemäß Unsinn.

Für dein Mailing gilt: Wenn Du in UTF-8 mailen willst, deine Strings aber in ISO-8859-1 vorliegen, musst Du sie schön von Hand konvertieren.

Fazit: Bei PHP muss man immer GANZ genau wissen, in welchem Encoding der Sourcecode vorliegt, und in welchem Encoding mit welchem Außensystem kommuniziert wird. Strings in PHP sind für die Standard-Stringfunktionen IMMER Bytesequenzen, diese Funktionen wissen nichts von Unicode. Das ist anders als in JavaScript. Deswegen musst Du, wenn Du deinen Sourcecode in UTF-8 speicherst, vermutlich alle Sourcen durchgehen, um zu prüfen, ob Du auf einmal UTF-8 und ISO-8859-1 Strings vermischst. Und eventuell auf die Funktionen der mbstring Extension umsteigen. Ganz einfach ist das bei Alt-Projekten nicht, denke ich mir.

Rolf

--
sumpsi - posui - clusi