Der Martin: Umlaute in String beim auslesen eines pop3 Postfaches

Beitrag lesen

Hallo,

Wandelt man den gesamten String mit bin2hex(); um und sucht hernach nach besagten hexadez.-Werten um diese z.B. durch ein ü zu ersetzen ?

nein, sicher nicht. Du hast vermutlich ein simples Codierungsproblem, mehr nicht.

echo bin2hex($msgBody);  ergibt fc0d3c62723e

Okay. Angenommen, das sei ISO-8859-1, entspricht das dem Klartext-String "ü\r<br>".
Anscheinend kommt dein Text aus der Mailnachricht also in ISO-8859-x an (das hättest du schon längst anhand der Mail-Header überprüfen können), du gibst ihn aber auf einer UTF-8-codierten Seite aus, ohne ihn umzuschlüsseln.
In UTF-8 ist ein einzeln auftretendes 0xFC nämlich ungültig, daher das Fragezeichen:
Nach dem Codierungsschema in Wikipedia ist 0xFC das erste Byte einer Sequenz, die aus 6 Bytes besteht (und *ein* Zeichen repräsentiert). Die folgenden fünf Bytes müssen aber alle im Bereich 0x80..0xFF liegen, andernfalls ist die gesamte Sequenz ungültig. Ergo wird das 0xFC mit den nachfolgenden fünf Bytes ignoriert und stattdessen ein Fragezeichen ausgegeben.

Den Header habe ich mit imap_headers(); ausgelesen. Das ergibt in Falle meiner Testmail " chars ".

Das ist auch ein ungünstiger Ansatz. Benutze stattdessen imap_fetchheader(). Diese Funktion gibt dir den gesamten Headerbereich einer Mailnachricht als String zurück. Darin findest du dann alle Angaben über die Anatomie deiner empfangenen Nachricht.

Falls du dann feststellst, dass die Codierung tatsächlich ISO-8859-x ist (was ich vermute), kannst du den Text vor der Ausgabe mit utf8_encode() passend umcodieren.

So long,
 Martin

--
Die letzten Worte des Systemadministrators:
Nur gut, dass ich ein intaktes Backup habe.