Start · Sprachen · PHP · Referenz · imap_mutf7_to_utf8

imap_mutf7_to_utf8

Funktion

Dekodiert einen im modifizierten UTF-7 kodierten String (mUTF-7, RFC 2060) in einen UTF-8-kodierten String.

seit PHP 5.3.0 Kategorie: http

Signatur

imap_mutf7_to_utf8(string $string): string|false

Beschreibung

imap_mutf7_to_utf8() konvertiert einen String aus der modifizierten UTF-7-Kodierung (mUTF-7) nach UTF-8. Modifiziertes UTF-7 wird primär bei IMAP-Postfachnamen verwendet, da das IMAP-Protokoll (RFC 2060 / RFC 3501) nicht-ASCII-Zeichen in Ordnernamen in diesem Format überträgt.

Im Gegensatz zum Standard-UTF-7 (RFC 2152) verwendet mUTF-7 das Zeichen & anstelle von + als Escape-Zeichen und lässt einige Zeichen unterschiedlich kodiert. Daher kann kein normaler UTF-7-Dekoder verwendet werden – diese Funktion ist speziell für das IMAP-Protokoll ausgelegt.

Typischer Anwendungsfall ist die lesbare Darstellung von IMAP-Ordnernamen, die Umlaute oder andere Nicht-ASCII-Zeichen enthalten, z. B. wenn ein Ordner serverseitig als &AMQ- zurückgeliefert wird und als Ä angezeigt werden soll.

Die Gegenfunktion zum Kodieren von UTF-8 zurück nach mUTF-7 lautet imap_utf8_to_mutf7().

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der im modifizierten UTF-7 (mUTF-7) kodierte Eingabe-String, typischerweise ein IMAP-Ordnername.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den dekodieren UTF-8-String zurück, oder false wenn der Eingabe-String kein gültiges mUTF-7 ist oder die Konvertierung fehlschlägt.

Beispiele

Einfachen mUTF-7-IMAP-Ordnernamen dekodieren

<?php
// IMAP-Server liefert Ordnernamen in mUTF-7
$mutf7FolderName = 'INBOX.&AMQ-rger'; // enthält 'Ärger'

$utf8FolderName = imap_mutf7_to_utf8($mutf7FolderName);

if ($utf8FolderName !== false) {
    echo 'Ordnername: ' . $utf8FolderName;
} else {
    echo 'Konvertierung fehlgeschlagen.';
}
Ordnername: INBOX.Ärger

IMAP-Ordnerliste mit lesbaren Namen ausgeben

<?php
$mailbox = '{imap.example.com:143}INBOX';
$username = 'user@example.com';
$password = 'secret';

$imap = imap_open($mailbox, $username, $password);
if ($imap === false) {
    die('Verbindung fehlgeschlagen: ' . imap_last_error());
}

$folders = imap_list($imap, '{imap.example.com:143}', '*');

if (is_array($folders)) {
    foreach ($folders as $folder) {
        // Serverseitig gelieferter Name ist mUTF-7-kodiert
        $readableName = imap_mutf7_to_utf8($folder);
        echo $readableName !== false ? $readableName : $folder;
        echo PHP_EOL;
    }
}

imap_close($imap);

Hin- und Rückkonvertierung prüfen

<?php
$original = 'Postfach.Entwürfe';

// UTF-8 → mUTF-7 → UTF-8
$encoded = imap_utf8_to_mutf7($original);
echo 'Kodiert: ' . $encoded . PHP_EOL;

$decoded = imap_mutf7_to_utf8($encoded);
echo 'Dekodiert: ' . $decoded . PHP_EOL;

echo 'Identisch: ' . ($original === $decoded ? 'Ja' : 'Nein') . PHP_EOL;
Kodiert: Postfach.Entw&APw-rfe Dekodiert: Postfach.Entwürfe Identisch: Ja

// Wichtig · Fallstricke

Erweiterung erforderlich: imap_mutf7_to_utf8() ist Teil der IMAP-Erweiterung (ext/imap), die auf dem System kompiliert und aktiviert sein muss. Ab PHP 8.4 ist die IMAP-Erweiterung als PECL-Paket ausgelagert und nicht mehr im PHP-Core enthalten.

Rückgabewert prüfen: Wenn der Eingabe-String kein gültiges mUTF-7 enthält, gibt die Funktion false zurück. Es empfiehlt sich stets, den Rückgabewert mit === false zu prüfen, bevor der String weiterverwendet wird.

Nur für mUTF-7, nicht für Standard-UTF-7: Die Funktion verarbeitet ausschließlich das modifizierte UTF-7-Format gemäß RFC 3501, nicht das Standard-UTF-7 (RFC 2152). Für andere Konvertierungen sollte mb_convert_encoding() in Betracht gezogen werden.