Start · Sprachen · PHP · Referenz · imap_utf7_decode

imap_utf7_decode

Funktion

Dekodiert einen im modifizierten UTF-7-Format (RFC 2060) kodierten String in einen normalen ISO-8859-1-String.

seit PHP 4.0.0 Kategorie: http

Signatur

imap_utf7_decode(string $string): string|false

Beschreibung

imap_utf7_decode() konvertiert einen String, der im modifizierten UTF-7-Format gemäß RFC 2060 (IMAP4) kodiert ist, zurück in einen lesbaren ISO-8859-1-String. Das modifizierte UTF-7-Format wird in IMAP-Protokollen vor allem für Ordnernamen verwendet, die Sonderzeichen oder Nicht-ASCII-Zeichen enthalten.

Das modifizierte UTF-7 unterscheidet sich vom Standard-UTF-7 (RFC 2152): Anstatt des +-Zeichens als Escape-Sequenz wird eine Kombination aus & und - verwendet. Beispielsweise wird der Ordnername Gesendete Elemente im IMAP-Protokoll häufig als Gesendete Elemente oder mit encodierten Sonderzeichen übertragen.

Diese Funktion ist besonders nützlich, wenn IMAP-Ordnernamen ausgelesen werden und diese für die Anzeige in einer Web-Anwendung oder einem E-Mail-Client in lesbarer Form benötigt werden. Das Gegenstück zum Kodieren ist die Funktion imap_utf7_encode().

Hinweis: Die IMAP-Erweiterung ist seit PHP 8.4 als veraltet markiert. Es wird empfohlen, auf alternative Bibliotheken wie php-imap oder die IMAP-Klassen des Symfony Mailer umzusteigen.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der im modifizierten UTF-7-Format (RFC 2060) kodierte Eingabe-String, der dekodiert werden soll.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den dekodierten ISO-8859-1-String zurück. Bei einem ungültigen oder nicht dekodier­baren Eingabe-String wird false zurückgegeben.

Beispiele

IMAP-Ordnernamen dekodieren

<?php
// Typischer modifizierter-UTF-7-String wie er im IMAP-Protokoll vorkommt
$encodedFolder = 'INBOX.Gel&APY-scht';  // kodierter Ordnername

$decoded = imap_utf7_decode($encodedFolder);

if ($decoded !== false) {
    echo 'Dekodierter Ordnername: ' . $decoded;
} else {
    echo 'Dekodierung fehlgeschlagen.';
}
Dekodierter Ordnername: INBOX.Gelöscht

Hin- und Rück-Konvertierung mit imap_utf7_encode

<?php
// Original-String mit Sonderzeichen
$original = 'Gesendete Elemente (Müll)';

// Kodieren in modifiziertes UTF-7
$encoded = imap_utf7_encode($original);
echo 'Kodiert: ' . $encoded . PHP_EOL;

// Wieder dekodieren
$decoded = imap_utf7_decode($encoded);
echo 'Dekodiert: ' . $decoded . PHP_EOL;

// Vergleich
echo 'Identisch: ' . ($original === $decoded ? 'Ja' : 'Nein') . PHP_EOL;
Kodiert: Gesendete Elemente (M&APw-ll) Dekodiert: Gesendete Elemente (Müll) Identisch: Ja

// Wichtig · Fallstricke

Deprecation: Die gesamte IMAP-Erweiterung (ext/imap) wurde in PHP 8.4 als veraltet markiert und erzeugt entsprechende Deprecation-Warnungen. Es wird empfohlen, auf alternative Bibliotheken umzusteigen.

Das modifizierte UTF-7-Format (RFC 2060) ist nicht identisch mit dem Standard-UTF-7 (RFC 2152). Verwechslungen führen zu falschen Kodierungen. In IMAP wird & als Escape-Zeichen statt + benutzt, und &- steht für ein literales &.

Der Rückgabewert ist ISO-8859-1 kodiert, nicht UTF-8. Für die Weiterverarbeitung in modernen PHP-Anwendungen sollte ggf. eine anschließende Konvertierung mit mb_convert_encoding() oder utf8_encode() erfolgen.