Start · Sprachen · PHP · Referenz · imap_utf8

imap_utf8

Funktion

Konvertiert einen MIME-kodierten Text-String (z. B. <code>=?ISO-8859-1?Q?...?=</code>) in einen UTF-8-kodierten String.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_utf8(string $mime_encoded_text): string

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

Typ
string
Beschreibung
Gibt den dekodierten Text als UTF-8-String zurück. Enthält der Eingabe-String keine MIME-Kodierung, wird er unverändert zurückgegeben.

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äöü
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;
Hello World

// 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.