Mail() php probléme d'accent dans sujet

Résolu/Fermé
benoitXV Messages postés 228 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 24 mai 2022 - 23 juin 2008 à 14:46
 krmasson - 8 avril 2015 à 21:33
Bonjour,


J'ai un problème (souvent évoqué I Know!)
J'envoi un mail (en php) dont les éléments sont importé depuis une base postgresql.

Le corps du message (qui contient des caractères accentués) est correct a la reception de e-mail.
Mais le sujet me donne "Validation de l'inscription sur A\&\eacute;ro-dico." à la place de
"Validation de l'inscription sur Aéro-dico."
Si je fait un echo sur la chaine de caractère correspondante au sujet. Le resultat est correcte.

Je seche...

mon header:

$headers="From: aero-dico \n";
$headers.="Reply-To: \n";
$headers.= "MIME-version: 1.0\n";
$headers.= "Content-type: text/html; charset= UTF-8\n";


merci d'avance

9 réponses

Laugarhraun Messages postés 14 Date d'inscription mercredi 16 juin 2010 Statut Membre Dernière intervention 10 septembre 2010 44
10 sept. 2010 à 15:44
Bonjour,
Bien que le sujet soit vieux, une rechercher de "accent sujet mail" dans google renvoie cette page en premier résultat.
Une fonction PHP encodera votre sujet comme vous le désirez : mb_encode_mimeheader()
40
Merci beaucoup Laugarhraun !! J'ai essayé toutes les solutions du dessus avec d'appliquer la tienne et je commencais à désespérer... Ta solution devrais se retrouver en tete de ce poste !!
Merciiiiiiii encore !
0
SomeoneOnTheWeb
2 mai 2012 à 12:23
Pour moi c'est la solution de Krol17 qui fut la plus efficace. ;)

Ne pas oublier, bien sûr, la dernière ligne des headers :
" $headers .='Content-Transfer-Encoding: 8bit'; "

mb_encode_mimeheader() ne marche pas dans mon cas...
0
incode Messages postés 8 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 13 mars 2017
8 juin 2013 à 09:36
pour moi ce qui fonctionne c'est d'utiliser mb_encode_mimeheader() avec utf8_decode() :
$subject = utf8_decode($subject);
$subject = mb_encode_mimeheader($subject,"UTF-8");
0
ou
mb_internal_encoding('UTF-8');
$subject = mb_encode_mimeheader($subject);
0
Pour que le sujet du mail prennent bien en compte les accents, il faut ajouter devant utf8_decode.

Ce qui donne :

$headers ='From: "Contact"<contact@contact.com>'."\n";
$headers .='Reply-To: contact@contact.com'."\n";
$headers .='Content-Type: text/html; charset="UTF-8"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';

$sujet = utf8_decode('RemplaClinic : Clôture de la demande du');

mail('email@email.com', $sujet, 'Mon message', $headers);

Et voila plus de souci avec l'accent dans le sujet.
26
merci beaucoup tu ma sauvé
0
tu es fort vraiment
0
Yesss, c'est la solution qui a marché pour moi. Merci.
0
Merci beaucoup et ça marche très bien !
0
marche nickel contrairement à mb_encode_mimeheader
0
benoitXV Messages postés 228 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 24 mai 2022 17
23 juin 2008 à 15:33
En fait c'etais l'inverse.


html_entity_decode($mon_sujet, ENT_QUOTES,'UTF-8');


merci
4
arnaudligth
23 juin 2008 à 16:47
ça veux dire que ça marche?
lequel htmlentities ou html_entity_decode()?
0
benoitXV Messages postés 228 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 24 mai 2022 17
23 juin 2008 à 16:52
c'est html_entity_decode()
4

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
arnaudligth
23 juin 2008 à 15:05
htmlentites() ?
2
wikimaginot.eu
11 févr. 2013 à 15:13
Pour ma part aucune des solutions exposées ne fonctionnait avec le sujet suivant : "Message envoyé à Pascal" car
- Soit le sujet était affiché correctement par le client mail mais le mail était affécté par l'Antispam d'une erreur liée à un caractére illégal dans le sujet (BAD HEADER SECTION, Non-encoded 8-bit data)
- soit le mail était 'clean' pour l'Antispam mais le sujet était incorrectement affiché par le client mail.


J'ai utilisé cela :
$sujet = utf8_decode($sujet);
$sujet= mb_encode_mimeheader($sujet,"UTF-8", "B", "\n");

et cela fonctionne correctement

Si l'un de vous peut m'aider à comprendre pourquoi, cela serait mieux....
1
"pour moi ce qui fonctionne c'est d'utiliser mb_encode_mimeheader() avec utf8_decode() :
$subject = utf8_decode($subject);
$subject = mb_encode_mimeheader($subject,"UTF-8");"

Je confirme que cela marche avec tous les clients mail que j'ai pu tester : outlook, gmail, yahoo et même l'appli mail de windows 8 qui me posait tant de problèmes!
MERCI!
1
Merci, 7 ans que ce truc m'em...ait.
Pour info (c'est facile d'expliquer une fois que ça marche :-) ), le utf8_decode convertit la chaîne en iso-latin, et mb_encode se charge ensuite de l'escaper, après l'avoir convertie en UTF-8.

mb_encode attend apparemment uniquement de l'iso-latin1 en entrée.

Le troisième paramètre ('Q' ou 'B' spécifie le format d'escapage (Q pour Base64, B pour Quoted printable (tous les caractères autres que A-Z a-z sont transformés en =XX)).
Seul inconvénient, ça n'encode pas le 'oe', qui n'appartient pas à l'iso8859-1, mais je vais vivre avec...
0
benoitXV Messages postés 228 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 24 mai 2022 17
23 juin 2008 à 15:12
j'ai bien essayé htmlentities(mon_sujet, ENT_QUOTES,'UTF-8');
mais c'est pire.
0
bonjour, au cas où ça intéresse quelqu'un,
même problème sur le sujet mais uniquement si le destinataire est sur mac ou ipad, le corps lui est correct et en iso-8859-15. Pas de problème sur windows.
0