Bonjour à tous.

Je cherche depuis 5 jours, j'ai visité une tonne sites et de forums. J'ai vérifié de nombreuses fois tous les points mentionnés. Que ce soit avec yahoo/Hotmail/gmail ou Windows mail(avec mon serveur) . J'ai tout essayé 1.000 fois. Rien à faire.

Petit résumé:
Site en PHP 5.3.5, page index + include.
Formulaire de contact avec captcha + mail()sur une seule page
Je récupère le $_POST['message'] venant de text area pour envoyer le contenu du message.


//j'ai vérifié un par un tous les scripts, ils sont bien tous encodés en UTF-8
la balise <meta http-equiv="content-type" content="text/html; charset=utf-8" /> est bien à sa place dans le <head>
j'ai mis header('Content-type: text/html; charset=UTF-8'); sur la page index ( MAIS çA NE CHANGE RIEN)
//j'ai vérifié le type d'encodage des navigateurs ainsi que de Windows Mail.


Le plus incompréhensible c'est qu'il y a 5/6 jours le message s'affichait correctement

Voici le code du mail:


if (isset($_POST['mail']))
{
// + diverses vérifications 
$mail  = 'moi@yahoo.fr'; // Déclaration des l'adresses de destination.
$mail2 = 'webmaster@monsite.com';
$mail3 = 'moi@hotmail.com';
$mail4 = 'moi@gmail.com';    
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui rencontrent des bogues.
{ $passage_ligne = "\r\n"; }
else
{ $passage_ligne = "\n"; }
//=====DECLARATION DES MESSAGES AU FORMAT HTML
$message_html = "<html><head></head><body>'".$_POST['message']."'<body><html>";//$message_html
//========== 
//=====CREATION DE LA BOUNDARY
$boundary = "-----=".sha1(rand());
//==========
//=====DEFINITION DU SUJET.
$sujet = "charset=\"UTF-8\"";
$sujet = $_POST['titre'];
//=========
//=====CREATION DU HEADER de l'e-mail.
$sender = $_POST['sender_name'];
$sendername = '=?UTF-8?B?'.base64_encode($sender).'?=';
$header = "From: \"'".$sendername."'\"<".$_POST['sender_email'].">".$passage_ligne;
$header.= "Reply-to: \"'".$sendername."'\"<".$_POST['sender_email'].">".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-type: text/html; charset=utf-8;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========
//==========
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====AJOUT DU MESSAGE AU FORMAT HTML
$message = "Content-Type: text/html; charset=\"UTF-8\"".$passage_ligne;
$message = "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message = "<u>From</u>: ".$_POST['sender_name']." : (" .$_POST['sender_email'].").".$passage_ligne;//= dans le corps de l'e-mail
$message.= $passage_ligne."<br/><br/>".$message_html.$passage_ligne;
//==========
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//==========
//=====Envoi de l'e-mail.
mail($mail,'=?UTF-8?B?'.base64_encode($sujet).'?=',stripslashes($message),$header);
mail($mail2,'=?UTF-8?B?'.base64_encode($sujet).'?=',stripslashes($message),$header);
mail($mail3,'=?UTF-8?B?'.base64_encode($sujet).'?=',stripslashes($message),$header);
mail($mail4,'=?UTF-8?B?'.base64_encode($sujet).'?=',stripslashes($message),$header);
//==========
// + Formulaire ect ...
?>


Merci beaucoup.
Bonjour,

Oui oui, tous les fichiers sont encodés en utf-8 sans BOM.

En fait, ils étaient en ISO-8859-1 (ANSI). J'ai pensé que le problème venait de cela, j'ai donc ouvert tous les fichiers, fait un copié-collé et réenregistré tous les fichiers un par un en utf-8 sans BOM, en écrasant chaque fois l'ancienne version.
Modérateur
a écrit :
j'ai donc ouvert tous les fichiers, fait un copié-collé et réenregistré tous les fichiers un par un en utf-8 sans BOM


Oh, la méthode de barbare! Au cas où, le presse-papier est rarement le meilleur transcodeur au monde.
@Gothor

Merci.

Quand j'ai fait les changements, je n'avais pas vu l'option "convertir" dans notepad++.
Reste à savoir si c'est le fait d'avoir réenregistré les fichiers en utf-8 qui est la source du problème.

Entretemps, j'ai trouvé l'instruction :
echo mb_internal_encoding();
... je l'ai placé sur une page et il me renvoit .... de l'ISO-8859-1!!!

Que faire Que faire ?
Modérateur
mhh sûrement ton serveur qui a des config en iso 88859 1.

As-tu tenté un "AddDefaultCharset UTF-8" dans ton htaccess, si tu tournes sous apache?
@kustolovic

Merci pour ta réponse

Malheureusement j'arrive, pas à pas, à la même conclusion que toi.
C'est sans doute à cause de configuration du serveur.

Je suis entrain de réfléchir à mettre un .htaccess comme tu le suggères, mais je redoute un peu de déclencher un catastrophe. La dernière que j'ai mis un htaccess , je suis resté une semaine complète dans la panade.

Je ne parviens pas à voir les .htaccess existants sur le site, ni avec cPanel, ni avec Filezilla.

Si quelqu'un a une idée ....

MERCI !