W3docs

quoted_printable_encode()

Notre article porte sur la fonction PHP quoted_printable_encode(), utilisée pour encoder une chaîne au format quoted-printable. Cette fonction est utile

La fonction PHP quoted_printable_encode() encode une chaîne 8 bits en une chaîne quoted-printable, l'encodage MIME défini dans RFC 2045. Le format quoted-printable conserve le texte ASCII imprimable lisible tout en transmettant en toute sécurité les octets que les anciens systèmes de messagerie 7 bits pourraient corrompre — les octets non imprimables et non-ASCII sont écrits sous la forme =XX, où XX est la valeur de l'octet en hexadécimal majuscule.

Cette page couvre la syntaxe, le fonctionnement des règles d'encodage, des exemples exécutables (y compris le comportement avec les caractères non-ASCII et le retour à la ligne automatique), les cas d'utilisation courants, et comment inverser l'opération.

Syntaxe

quoted_printable_encode(string $string): string
ParamètreDescription
$stringLa chaîne 8 bits à encoder.

Valeur de retour : la version encodée en quoted-printable de $string.

Fonctionnement de l'encodage

Trois règles couvrent presque tous les cas :

  • L'ASCII imprimable reste tel quel — les lettres, les chiffres et la plupart des signes de ponctuation passent inchangés, ce qui explique pourquoi le texte quoted-printable reste principalement lisible par l'être humain.
  • Les autres octets deviennent =XX — tout octet en dehors de la plage sûre (caractères de contrôle, = lui-même, et tout octet supérieur à 126, y compris les octets UTF-8 des caractères accentués ou non-latins) est écrit sous la forme d'un signe égal suivi de deux chiffres hexadécimaux.
  • Les longues lignes sont découpées par des sauts doux — les lignes sont maintenues à 76 caractères ou moins en insérant un « saut de ligne doux » : un = final immédiatement suivi d'un retour à la ligne. Le décodeur le supprime, de sorte qu'aucun contenu réel n'est perdu.

Exemple de base

php— editable, runs on the server

Sortie :

Hello World!

Comme 'Hello World!' est entièrement en ASCII imprimable, la sortie est identique à l'entrée — chaque caractère relève de la première règle.

Encodage de texte non-ASCII

L'encodage ne change visiblement que lorsque la chaîne contient des octets non sûrs pour le transport 7 bits, comme des lettres accentuées ou des symboles :

<?php
$string = 'Café costs £5';
echo quoted_printable_encode($string);
?>

Sortie :

Caf=C3=A9 costs =C2=A35

Ici, é correspond aux deux octets UTF-8 0xC3 0xA9, encodés sous la forme =C3=A9, et £ correspond à 0xC2 0xA3, encodé sous la forme =C2=A3. Les caractères ASCII ordinaires qui les entourent restent inchangés.

Sauts de ligne doux pour les longues lignes

Lorsqu'une ligne dépasse 76 caractères, la fonction insère un saut de ligne doux (= suivi d'un retour à la ligne) afin que la sortie respecte les limites de longueur de ligne des e-mails :

<?php
$string = str_repeat('abcdefghij', 9) . 'END';
echo quoted_printable_encode($string);
?>

Sortie :

abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcde=
fghijabcdefghijEND

Le = final avant le retour à la ligne marque le saut ; un décodeur quoted-printable reconstitue la ligne d'origine.

Quand l'utiliser

Utilisez quoted_printable_encode() lorsque vous construisez le corps ou les en-têtes d'un e-mail manuellement et que vous avez besoin d'une représentation 7 bits sûre d'un contenu principalement textuel — par exemple, pour définir la partie Content-Transfer-Encoding: quoted-printable d'un message MIME. C'est le bon choix lorsque les données sont principalement du texte lisible avec quelques caractères spéciaux ; pour des données binaires ou très peu textuelles, l'encodage base64 est plus compact.

En pratique, la plupart des bibliothèques de messagerie modernes (PHPMailer, Symfony Mailer) appliquent cet encodage pour vous, donc vous l'appelez rarement directement — mais il est très utile pour le débogage ou pour les scripts de bas niveau qui assemblent des messages bruts.

Inverser l'encodage

Utilisez quoted_printable_decode() pour convertir une chaîne quoted-printable en données 8 bits d'origine :

<?php
$encoded = quoted_printable_encode('Café costs £5');
echo quoted_printable_decode($encoded);
?>

Sortie :

Café costs £5

Fonctions associées

Pratique

Pratique
Que fait la fonction quoted_printable_encode() en PHP ?
Que fait la fonction quoted_printable_encode() en PHP ?
Was this page helpful?