Hi,
Dass die Header dennoch richtig codiert sein müssen, ist wahr. Sie dürfen nur ASCII-Zeichen enthalten.
Wenn man nicht weiß/nicht wissen kann, in welcher Codierung die Daten kommen, empfiehlt sich eine Funktion, die zumindest versucht zu erkennen, welche Codierung vorliegt.
aber nicht für die Header. Da gibt's nichts zu raten oder zu versuchen. Entweder der Wert eines Mailheaders ist komplett ASCII, dann darf man ihn unmaskiert schreiben, oder er enthält irgendein Nicht-ASCII-Zeichen, dann muss man ihn codieren - und zwar wie im folgenden Beispiel:
=?ISO-8859-1?Q?Max M=FCller?=
Der codierte String hat drei Felder, die jeweils durch Fragezeichen getrennt sind. Das erste Feld gibt die verwendete Zeichencodierung an - das ist wichtig, damit die Bytewerte im codierten String richtig interpretiert werden können. Das zweite Feld gibt die Transportcodierung an, entweder Q für Quoted-Printable (bevorzugt), oder B für base64. Und das dritte Feld enthält schließlich den eigentlichen String in der gewählten Transportcodierung.
Genau das macht die von dir schon empfohlene Funktion mb_encode_mimeheader(). Aber ich halte es für fahrlässig, den Parameter charset für die Zeichencodierung *nicht* explizit anzugeben; IMHO dürfte er nicht optional sein.
Ich habe oben Quoted-Printable als bevorzugt genannt, weil man damit einen Text, der nur ein paar Nicht-ASCII-Zeichen enthält, immer noch ganz gut lesen kann. Einem base64-codierten String sieht man dagegen nicht mehr an, was wirklich in ihm steckt. Deswegen wundert es mich auch, dass base64 von mb_encode_mimeheader() als Default genommen wird.
So long,
Martin
Lebensmotto der Egoisten:
Was ist so schlimm daran, dass jeder nur an sich selbst denkt? Dann ist doch an alle gedacht!
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(