Emails PHP et caractères accentués
Posté le Wednesday 30 January 2013 | Catégories : PHP
Si votre application web utilise PHP pour envoyer des emails, les caractères accentués risquent de ne pas s'afficher correctement sur certains clients mail, comme MS Outlook ou Mozilla Thunderbird par exemple.
Pour palier ce problème, il faut:
- indiquer que l'email utilise les headers MIME, version 1.0;
- indiquer manuellement l'encodage utilisé pour représenter les caractères (utf-8) dans l'entête de l'email;
- comme le contenu de l'email au moment du transfert entre les Mail Transfert Agents (MTA) doit être composé uniquement de caractères ASCII, il faut encoder le texte de l'email au format quoted-printable, et l'indiquer dans l'entête.
Par exemple, si le texte contient le caractère "ê", comme PHP utilise utf-8 en interne, il sera encodé sur 2 Bytes (16 bits donc), de valeur décimale 195 et 170, ou de valeur hexadécimale C3 et AA. Cette séquence binaire ne correspond pas forcément à des caractères ASCII. En utilisant l'encodage quoted-printable, cette séquence binaire est représentée par les charactères =C3=AA, qui sont des caractères ASCII valides
$text = quoted_printable_encode("éèç");
$to = "thibault.debatty@web-d.be";
$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";
mail($to, $subject, $text, $headers);