Bonjour à tous,

J'ai créé un formulaire de contact. Et j'ai testé le champs "message" avec différents caractères spéciaux.
Exemple :
"Bonjour
2ème ligne pour vérifier les accents et les sauts de ligne
L'arc en ciel pour vérifier les apostrophes"

Sur toutes les boites gmail sur lesquelles j'ai testé, je reçois bien le message. Rien d'anormal. Dès que j'envoie sur une boite de free ou voila, les accents deviennent "é". Aie :s Problème d'encodage

Voici mon code pour l'envoi en php :

	$object   = "CONTACT";
	$to         = "adresse@gmail.com, adresse@free.fr";
	$entete   = "From: ".$contact_post['email']."\n";
	$entete  .= "Content-type: text/html; charset= iso-8859-1\n";
        $message = "Message : ".stripcslashes(nl2br($contact_post['message']))."<br />";


Que je test avec charset=iso-8859 ou charset=utf-8, cela revient au même, j'ai toujours ces caractères spéciaux qui apparaissent.

En enlevant la dernière ligne concernant le content-type et l'encodage, tout redevient normal. Mais j'avais mis cette ligne pour pouvoir utiliser les balises HTML (notamment mettre une phrase en gras).

Quelqu'un aurait-il une solution pour utiliser du HTML tout en réceptionnant les caractères spéciaux normalement ?
Modifié par fanny95 (26 Mar 2011 - 11:37)
J'ai refais des tests. Il fallait mettre utf8 tout attaché, sans tiret :


$object   = "CONTACT - Dépannage à Domicile";
$to         = "adresse@gmail.com";
$entete   = "From: ".$contact_post['email']."\n";
$entete  .= "Content-type: text/html; charset= utf8\n";
$message = "Date : ".date('d-m-Y')."<br /><br />";


Du coup, le message s'affiche bien, avec les bons caractères spéciaux, que ce soit sur gmail, voila, free, ou même sur portable.

Par contre, l'accent dans l'objet : Dépanne, se transforme en Dépanne
J'ai regardé dans ma boite mail, et beaucoup de mails que je reçois (notamment Facebook) s'affiche comme ça.

Quelqu'un aurait-il une idée pour éviter ce problème ?

Je rappelle que mon document est encodé en UTF-8
Modifié par fanny95 (26 Mar 2011 - 16:27)
Problème résolu.

Afin d'éviter les caractères spéciaux dans les sujets des mails en php, il faut mettre la fonction suivante :

$object     = utf8_decode("DEVIS - Dépannage à Domicile");

Modifié par fanny95 (26 Mar 2011 - 16:27)
Hmm. J'ai l'impression que tu n'es pas allée au fond du problème, et que tu n'as pas compris la solution retenue.

utf8_decode prend en paramètre une chaine UTF-8 (c'est le cas ici si ton fichier PHP est enregistré en UTF-8), et la convertit en ISO-8859-1. Si le but est d'envoyer des données en ISO-8859-1, déclarées comme telles dans les en-têtes de l'e-mail, c'est très bien. Mais dans l'extrait de code précédent tu sembles déclarer un codage UTF-8.
Oui c'est tout à fait ça. Tout en utf8.
Mais dans ce cas là, malgré ma page en utf8, l'encodage du mail, pourquoi je ne reçois pas bien les accents ?
As-tu une solution plus appropriée ou peux-tu me dire pourquoi cela ne fonctionne pas ?
Il y a plusieurs choses à prendre en compte:
- le bon codage des caractères dans le mail envoyé (à vérifier avec la source du mail, pas juste en visualisant dans tel ou tel client);
- la bonne déclaration du codage dans la source du mail;
- la fonction ou classe PHP utilisée pour l'envoi du mail: est-ce qu'elle attend un codage précis, est-ce qu'elle en accepte plusieurs mais il faut passer une info en paramètre?

La fonction mail de PHP a l'air plutôt limitée pour la gestion des codages, apparemment il faut faire le boulot de mise en conformité avec RFC 2047 soi-même.
http://php.net/manual/en/function.mail.php
http://www.faqs.org/rfcs/rfc2047.html
Ou alors la fonction fait des traitements particuliers du texte sans le dire, et la doc est incomplète. Hum...

On peut aussi regarder du côté de classes PHP plus complètes, notamment http://pear.php.net/package/Mail_Mime