Caractères spéciaux dans un fichier php et mail

Votre formulaire de contact affiche des caractères bizarres sur votre site et le message que vous avez reçu via ce formulaire n'est pas lisible à cause du même problème... essayez ma solution qui est juste une solution parmi les autres. Mais mon fichier php marche seulement dans la façon suivante :

 
 
 
 
 
 
 
 
 
 

Les caractères spéciaux sur votre site web

Utilisez le tableau des codes HTML et remplacez les caractères avec les noms HTML...

à : à
É : É
etc.

Donc, si votre phrase est "Écrivez-nous !", ça donne : Écrivez-nous !

 

Les caractères spéciaux dans les messages reçus

1) Vous devez d'abord utiliser les fonctionnes multibyte. Cherchez et replacez strlen à mb_strlen, strrpos à mb_strrpos, substr à mb_substr.

 

2) Cherchez la partie des codes du formulaire de contact dans le fichier php qui génère le message. Elle ressemble à ça :

// Send the email
$to = "mon-email@gmail.com";
$message = "
From: $name
Email: $email
Subject: $subject
Message: $message"
;
$headers = "Mon message : message de mon site web via le formulaire de contact";

mail($to, $subject, $message, $headers);

 

3) Rajoutez les codes suivants avant la partie des codes mentionnés ci-dessus :

mb_strlen('è', 'UTF-8');
mb_strlen('é', 'UTF-8');
mb_strlen('ë', 'UTF-8');
mb_strlen('ê', 'UTF-8');
mb_strlen('à', 'UTF-8');
mb_strlen('â', 'UTF-8');
mb_strlen('î', 'UTF-8');
mb_strlen('ï', 'UTF-8');
mb_strlen('ô', 'UTF-8');
mb_strlen('ù', 'UTF-8');
mb_strlen('û', 'UTF-8');
mb_strlen('ç', 'UTF-8');

mb_strlen('È', 'UTF-8');
mb_strlen('É', 'UTF-8');
mb_strlen('Ë', 'UTF-8');
mb_strlen('Ê', 'UTF-8');
mb_strlen('À', 'UTF-8');
mb_strlen('Â', 'UTF-8');
mb_strlen('Î', 'UTF-8');
mb_strlen('Ï', 'UTF-8');
mb_strlen('Ô', 'UTF-8');
mb_strlen('Ù', 'UTF-8');
mb_strlen('Û', 'UTF-8');
mb_strlen('Ç', 'UTF-8');

 

4) Dans la partie des codes que je vous ai fait cherché tout à l'heure, il faut corriger le $headers où j'avais un message pour moi-même. Ce message était proposé par l'auteur du formulaire à la base. Finalement j'ai du utiliser le code $headers pour l'instruction d'encodage. Le bon code :

$headers = "Content-Type: text/html; charset=UTF-8\n";

 

5) Optionnel : mon message à moi-même peut être replacé dans le corps du message...

 

Le code final complet ressemble à ça :

mb_strlen('è', 'UTF-8');
mb_strlen('é', 'UTF-8');
mb_strlen('ë', 'UTF-8');
mb_strlen('ê', 'UTF-8');
mb_strlen('à', 'UTF-8');
mb_strlen('â', 'UTF-8');
mb_strlen('î', 'UTF-8');
mb_strlen('ï', 'UTF-8');
mb_strlen('ô', 'UTF-8');
mb_strlen('ù', 'UTF-8');
mb_strlen('û', 'UTF-8');
mb_strlen('ç', 'UTF-8');

mb_strlen('È', 'UTF-8');
mb_strlen('É', 'UTF-8');
mb_strlen('Ë', 'UTF-8');
mb_strlen('Ê', 'UTF-8');
mb_strlen('À', 'UTF-8');
mb_strlen('Â', 'UTF-8');
mb_strlen('Î', 'UTF-8');
mb_strlen('Ï', 'UTF-8');
mb_strlen('Ô', 'UTF-8');
mb_strlen('Ù', 'UTF-8');
mb_strlen('Û', 'UTF-8');
mb_strlen('Ç', 'UTF-8');

// Send the email
$headers = "Content-Type: text/html; charset=UTF-8\n";
$to = "igorlaszlo@hotmail.com";
$message = "
Message from West Hungary website
<br />
From: $name
<br />
Email: $email
<br />
Subject: $subject
<br />
Message: $message"
;

mail($to, $subject, $message, $headers);

 

6) Pour la fin vous devez enregistrer votre fichier encodé en UTF-8 sans BOM. Si vous travaillez avec Dreamweaver, vous devez aller au menu Édition → Préférences → Nouveau document → Codage par défaut → choisissez Unicode(UTF-8) et décochez un peu plus bas "Inclure une signature Unicode BOM" (important) !

 

Source:
Ma question sur le forum, la solution en anglais

 

Les commentaires sont fermés.