Signatur
Beschreibung
imap_utf8() dekodiert MIME-kodierte Zeichenketten, wie sie häufig in E-Mail-Headern (z. B. Betreffzeile oder Absendername) vorkommen, und gibt das Ergebnis als UTF-8-String zurück. MIME-kodierte Texte folgen dem in RFC 2047 beschriebenen Format =?Charset?Encoding?EncodedText?= und können mit Quoted-Printable (Q) oder Base64 (B) kodiert sein.
Die Funktion ist besonders nützlich, wenn man E-Mail-Header mit der IMAP-Erweiterung ausliest und die enthaltenen Werte in einer einheitlichen Kodierung für die Weiterverarbeitung oder Ausgabe benötigt. Ohne diese Konvertierung können Umlaute oder Sonderzeichen in E-Mail-Betreffs korrumpiert aussehen oder zu Darstellungsfehlern führen.
Enthält der übergebene String keinen MIME-kodierten Anteil, wird der String unverändert zurückgegeben. Die Funktion gehört zur PHP-IMAP-Erweiterung (ext/imap), die separat aktiviert sein muss.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mime_encoded_text Pflicht | string | Ein MIME-kodierter Text-String gemäß RFC 2047, wie er typischerweise in E-Mail-Headern vorkommt (z. B. =?ISO-8859-1?Q?Betreff_mit_Umlaut=E4?=). |
Rückgabewert
Beispiele
Betreffzeile einer E-Mail dekodieren
<?php
// Typischer MIME-kodierter Betreff aus einem E-Mail-Header
$subject = '=?ISO-8859-1?Q?Betreff_mit_Umlaut=E4=F6=FC?=';
$decoded = imap_utf8($subject);
echo $decoded;
// Ausgabe: Betreff mit Umlautäöü
E-Mail-Header aus IMAP-Postfach lesen und dekodieren
<?php
// Verbindung zum IMAP-Server herstellen
$inbox = imap_open(
'{imap.example.com:993/imap/ssl}INBOX',
'benutzer@example.com',
'geheimespasswort'
);
if ($inbox) {
$emails = imap_fetch_overview($inbox, '1:5');
foreach ($emails as $email) {
// Betreff in UTF-8 konvertieren
$subject = imap_utf8($email->subject);
$from = imap_utf8($email->from);
echo 'Von: ' . htmlspecialchars($from) . PHP_EOL;
echo 'Betreff: ' . htmlspecialchars($subject) . PHP_EOL;
echo '---' . PHP_EOL;
}
imap_close($inbox);
}
Base64-kodierter MIME-Header (UTF-8-Quelle)
<?php
// Einige E-Mail-Clients kodieren UTF-8-Texte mit Base64
$encoded = '=?UTF-8?B?SGVsbG8gV29ybGQ=?=';
$decoded = imap_utf8($encoded);
echo $decoded;
// Wichtig · Fallstricke
Erweiterung erforderlich: imap_utf8() ist Teil der IMAP-Erweiterung, die unter Linux mit dem Paket php-imap und einem entsprechenden Eintrag in der php.ini (extension=imap) aktiviert werden muss.
Ausgabe-Sicherheit: Beim Ausgeben dekodierter E-Mail-Header im HTML-Kontext sollte immer htmlspecialchars() verwendet werden, da bösartige Absender Sonderzeichen oder HTML-Tags in Headern einschleusen können (XSS-Risiko).
Alternative: Für eine robustere und von der IMAP-Erweiterung unabhängige Dekodierung von MIME-Headern kann mb_decode_mimeheader() aus der mbstring-Erweiterung verwendet werden.