Christian Kruse: PHP IMAP Umlaute Problem

Beitrag lesen

Hallo mixmastertobsi,

Und wie decodiere ich dann - Deiner Meinung nach?

mb_convert_encoding habe ich auch bereits ausprobiert.

mb_convert_encoding($body, "UTF-8", "iso-8859-1");

Emails haben mehrere Ebenen an Kodierungsverfahren. Die erste Ebene ist das Charset, damit bezeichnet man die Kodierung, mit der die einzelnen Zeichen kodiert werden. Das kann UTF-8 sein, das kann ISO-8859-1 sein, aber es kann eben auch Big5 sein. In deinem Fall scheint das ISO-8859-1, ISO-8859-15 oder Windows-1252 sein - die kann man schwer auseinander halten, denn sie sind sich in vielen Punkten sehr ähnlich. Welches Encoding das genau ist, steht aber in deiner Mail. In deren Headern steht sowas wie Content-Type: text/plain; charset=ISO-8859-1 oder ähnliches.

Die nächste Ebene ist das Transport Encoding. Das ist häufig Base64 oder Quoted Printable, in deinem Fall ist das Quoted Printable. Das wird über den Text nochmal drüber laufen gelassen, um zu verhindern, dass Zeichen ausserhalb von ASCII übermittelt werden: bei Emails ist nach wie vor nicht sicher gestellt, dass alles überhalb der ASCII-Range auch tatsächlich fehlerfrei übermittelt werden kann.

Um also den Text korrekt darzustellen musst du zuerst den Text von Quoted Printable in die 8-Bit-Kodierung übertragen, das macht quoted_printable_decode. Danach musst du den Text in den Zeichensatz übertragen, in dem deine Website dargestellt wird. Das machst du mit deinem mb_convert_encoding.

Welches der Quellzeichensatz ist und ob Quoted Printable verwendet wurde liest du am besten aus den Header-Informationen.

LG,
CK