Start · Sprachen · PHP · Referenz · imap_utf8_to_mutf7

imap_utf8_to_mutf7

Funktion

Kodiert einen UTF-8-String in das modifizierte UTF-7-Format (mUTF-7) gemäß RFC 2060, wie es für IMAP-Postfachnamen verwendet wird.

seit PHP 8.3.0 Kategorie: http

Signatur

imap_utf8_to_mutf7(string $string): string|false

Beschreibung

imap_utf8_to_mutf7() konvertiert einen UTF-8-kodierten String in das modifizierte UTF-7-Format (auch Modified UTF-7 oder mUTF-7 genannt), das in RFC 2060 definiert ist. IMAP-Server verwenden dieses Format intern zur Darstellung von Postfachnamen (Mailbox-Namen), die Nicht-ASCII-Zeichen enthalten, z. B. Umlaute oder andere internationale Schriftzeichen.

Das modifizierte UTF-7 unterscheidet sich vom Standard-UTF-7: Nicht-ASCII-Zeichenfolgen werden mit & eingeleitet und mit - abgeschlossen, wobei der Inhalt Base64-kodiert ist. ASCII-Zeichen werden direkt übernommen. Dieses Verfahren ermöglicht es, IMAP-Ordnernamen zuverlässig zu übertragen, ohne dass es zu Problemen mit Zeichencodierungen auf dem Transportweg kommt.

Diese Funktion ist typischerweise dann sinnvoll, wenn man Ordnernamen auf einem IMAP-Server erstellen, umbenennen oder referenzieren möchte, die Sonderzeichen enthalten – etwa Gesendet, Gelöscht oder Ordner in fernöstlichen Schriftzeichen. Vor dem Senden des Ordnernamens an den IMAP-Server muss dieser korrekt kodiert sein.

Die umgekehrte Operation, also die Konvertierung von mUTF-7 zurück in UTF-8, übernimmt imap_mutf7_to_utf8().

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der UTF-8-kodierte Eingabe-String, der in modifiziertes UTF-7 umgewandelt werden soll, z. B. ein IMAP-Ordnername mit Umlauten oder anderen Sonderzeichen.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den in modifiziertes UTF-7 konvertierten String zurück. Bei einem Fehler (z. B. ungültige UTF-8-Eingabe) wird false zurückgegeben.

Beispiele

Ordnername mit Umlaut kodieren

<?php
$ordner = 'Gelöscht';
$mutf7 = imap_utf8_to_mutf7($ordner);

if ($mutf7 !== false) {
    echo 'mUTF-7: ' . $mutf7 . PHP_EOL;
} else {
    echo 'Kodierung fehlgeschlagen.' . PHP_EOL;
}
mUTF-7: Gel&APY-scht

IMAP-Verbindung: Ordner mit Sonderzeichen anlegen

<?php
// IMAP-Verbindung herstellen
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheim');

if ($imap) {
    // Ordnername in mUTF-7 kodieren, bevor er an den Server gesendet wird
    $ordnerName = 'Spëcial Földer';
    $kodiert = imap_utf8_to_mutf7($ordnerName);

    if ($kodiert !== false) {
        $ergebnis = imap_createmailbox($imap, '{imap.example.com:993}' . $kodiert);
        echo $ergebnis ? 'Ordner erfolgreich erstellt.' : 'Fehler beim Erstellen.';
    } else {
        echo 'Kodierung fehlgeschlagen.';
    }

    imap_close($imap);
}

Hin- und Rückkonvertierung prüfen

<?php
$original = 'Frühlingsbriefe';
$mutf7    = imap_utf8_to_mutf7($original);
$zurueck  = imap_mutf7_to_utf8($mutf7);

echo 'Original : ' . $original . PHP_EOL;
echo 'mUTF-7   : ' . $mutf7    . PHP_EOL;
echo 'Zurück   : ' . $zurueck  . PHP_EOL;
echo 'Identisch: ' . ($original === $zurueck ? 'ja' : 'nein') . PHP_EOL;
Original : Frühlingsbriefe mUTF-7 : Fr&APY-hlingsbriefe Zurück : Frühlingsbriefe Identisch: ja

// Wichtig · Fallstricke

Verfügbarkeit: imap_utf8_to_mutf7() wurde mit PHP 8.3.0 als eigenständige Funktion eingeführt und benötigt die IMAP-Erweiterung (ext/imap). In älteren PHP-Versionen stand diese Konvertierung nicht als separate Funktion zur Verfügung.

Eingabekodierung: Die Eingabe muss gültiges UTF-8 sein. Wird ein String in einer anderen Kodierung übergeben (z. B. ISO-8859-1), kann das Ergebnis falsch oder false sein. Ggf. vorher mit mb_convert_encoding() konvertieren.

Nur für Mailbox-Namen: mUTF-7 ist ausschließlich für IMAP-Ordnernamen gedacht. Für E-Mail-Header-Felder (z. B. Betreff) wird stattdessen RFC 2047 (encoded-words) verwendet, hierfür sind andere Funktionen wie imap_utf8() zuständig.