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