Signatur
Beschreibung
quoted_printable_encode() wandelt einen beliebigen 8-Bit-String in das Quoted-Printable-Format um. Dabei werden alle Zeichen außerhalb des druckbaren ASCII-Bereichs (sowie bestimmte Sonderzeichen) durch ein Gleichheitszeichen (=) gefolgt von zwei hexadezimalen Ziffern ersetzt, z. B. wird ein Umlaut wie ä (UTF-8: 0xC3 0xA4) zu =C3=A4.
Das Quoted-Printable-Format ist primär für E-Mail-Inhalte gedacht, die per SMTP übertragen werden. Da SMTP-Server ursprünglich nur 7-Bit-ASCII zuverlässig transportieren konnten, ermöglicht diese Kodierung die Übermittlung von Inhalten mit Umlauten, Sonderzeichen oder binären Daten. Im Gegensatz zu Base64 bleibt lesbarer ASCII-Text weitgehend im Klartext erhalten, was die Lesbarkeit in einfachen Mail-Clients verbessert.
Die Funktion ist das Gegenstück zu quoted_printable_decode(). Lange Zeilen werden automatisch auf maximal 76 Zeichen umgebrochen, wobei ein Soft-Line-Break (=\r\n) eingefügt wird, wie es RFC 2045 vorschreibt.
Typische Anwendungsfälle sind das Kodieren von E-Mail-Headern und -Bodys in PHP-Mailer-Bibliotheken oder das manuelle Erstellen von MIME-konformen Nachrichten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Der zu kodierende 8-Bit-String. Kann beliebige Bytes enthalten, also auch UTF-8-Text mit Umlauten oder binäre Daten. |
Rückgabewert
=) bleiben unverändert, alle anderen Bytes werden als =XX dargestellt. Zeilen werden automatisch auf 76 Zeichen mit Soft-Line-Breaks (=\r\n) begrenzt.Beispiele
Einfachen deutschen Text kodieren
<?php
$text = 'Hallo Welt! Ä, Ö und Ü sind Umlaute.';
$encoded = quoted_printable_encode($text);
echo $encoded;
E-Mail-Body für SMTP vorbereiten
<?php
$body = "Sehr geehrte Damen und Herren,\n\nvielen Dank für Ihre Nachricht.\nMit freundlichen Grüßen,\nMax Müller";
$encodedBody = quoted_printable_encode($body);
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
$headers .= "Content-Transfer-Encoding: quoted-printable\r\n";
echo "Headers:\n" . $headers . "\n";
echo "Body (kodiert):\n" . $encodedBody;
Hin- und Rückkodierung prüfen
<?php
$original = 'PHP ist großartig! Preis: 19,99 €';
$encoded = quoted_printable_encode($original);
$decoded = quoted_printable_decode($encoded);
echo 'Original: ' . $original . "\n";
echo 'Kodiert: ' . $encoded . "\n";
echo 'Dekodiert: ' . $decoded . "\n";
echo 'Identisch: ' . ($original === $decoded ? 'Ja' : 'Nein') . "\n";
// Wichtig · Fallstricke
Zeilenumbrüche: Die Funktion erwartet und erzeugt CRLF-Zeilenenden (\r\n) gemäß RFC 2045. Bei reinen LF-Eingaben (\n) können die Zeilenenden im kodierten Ergebnis abweichen. Prüfe dies beim Einsatz in plattformübergreifenden Anwendungen.
Nicht für URLs geeignet: Quoted-Printable ist kein URL-Encoding. Verwende für URLs stattdessen urlencode() oder rawurlencode().
Leerzeichen am Zeilenende: Leerzeichen und Tabulatoren am Ende einer Zeile werden ebenfalls kodiert (=20 bzw. =09), da RFC 2045 dies zum Schutz vor Mail-Servern vorschreibt, die solche Whitespace-Zeichen entfernen könnten.