Pb de caractères accentués suite envoi des infos saisies dans un formulaire via la fonction mail

Petit nouveau ! | 5 Messages

02 nov. 2021, 13:47

Bonjour,

J'ai fait le tour de différents sites et n'ai pas réussi à solutionner mon problème, pourtant le sujet est assez connu apparemment ...

Je crée à mes heures perdues des sites internet et pour l'un d'entre eux , une fonctionnalité ne fonctionne par correctement ...

J'espère que vous pourrez m'aider ...

La problématique est la suivante : l'une des pages du site permet de saisir un message que l'on souhaite transmettre à quelqu'un.
La saisie se fait via un formulaire classique et à la soumission on envoi le contenu du formulaire via la fonction mail.
Le problème est que les caractères accentués ne sont pas correctement affichés.

J'ai essayé différentes définition du CHARSET mais rien n'y fait ...


dans la page index je précise :
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

dans le php du formulaire je précise les éléments suivants :

j'ai essayé ces deux définitions :
$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
et
$headers .='Content-type: text/html; charset= utf-8'."\n";
$headers .='Content-Transfer-Encoding: 8bit';

et derrière la fonction mail :
mail($adresse,$messageobjet,$messagedeposez, $headers)

Est ce que vous voyez d'où peux provenir le problème ? de quels éléments auriez vous besoin pour pouvoir m'aider ?

Par avance merci.
Cordialement,
Alain

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

02 nov. 2021, 15:12

Au début de tes scripts PHP :
header('Content-type: text/html; charset=utf-8');
Vérifie que ton éditeur de code est bien en UTF8 aussi.
Pour te simplifier la vie, il faut que tout soit en utf8 du début à la fin.

Et en dernier recours, tu bidouilles avec utf8_encode() ou utf8_decode()
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 5 Messages

02 nov. 2021, 20:00

Bonjour,

qu'est ce que tu entends par éditeur de code ?

en fait le site fonctionne comme si il n'y avait qu'une page php à afficher : les autres pages php sont des parties de la page index.php et s'affichent en fonction du choix de l'utilisateur.
=> du coup je ne précise <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> que dans le <head> de ma page index.php .
il faudrait ajouter "header('Content-type: text/html; charset=utf-8');" au début de chacune de mes pages .php ?

merci

Mammouth du PHP | 2703 Messages

02 nov. 2021, 20:47

l'éditeur de code est le logiciel utilisé pour modifier le code php.

il faut ajouter le header sur la page contenant le formulaire et sur le script envoyant l'email. ctrl + i sous firefox pour vérifier que c'est bien en utf8.

Petit nouveau ! | 5 Messages

03 nov. 2021, 13:58

Bonjour,
Merci pour le retour.

je ne comprend spas trop le lien avec l'éditeur ( en l'occurence ici c'est DW CS5), on pourrait très bien l'écrire via un vieux bloc note ...

J'ai vérifié via fire fox la page est bien encodée UTF-8.

je suppose que c'est l'encodage lors de l'envoi du mail qui est faux, voilà ce que j'avais intégré dans le header pour rappel :
j'ai essayé ces deux définitions :
$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
et
$headers .='Content-type: text/html; charset= utf-8'."\n";
$headers .='Content-Transfer-Encoding: 8bit';

Est ce que c'est là qu'il y a un souci ?
Merci
Alain

Mammouth du PHP | 2703 Messages

03 nov. 2021, 14:02

dans mon éditeur, je peux changer l'encodage, passer d'utf8 à iso..., ce qui a un impact dans certains cas.

si au lieu d'envoyer l'email, le script affiche les données du formulaire, les accents s'affichent correctement ?

Petit nouveau ! | 5 Messages

03 nov. 2021, 14:17

oui j'avais testé via un echo et ça fonctionne correctement

Petit nouveau ! | 5 Messages

05 nov. 2021, 09:19

Bonjour

est ce quelqu'un aurait une idée pour solutionner ce problème ?

Par avance merci.
Alain

Mammouth du PHP | 2703 Messages

05 nov. 2021, 13:44

repartir de 0. commencer par faire un script php qui envoie un mail en utf8 avec des accents.
ensuite, faire un formulaire et l'envoyer vers un script qui affiche le contenu du formulaire.
enfin, envoyer le formulaire vers le script d'envoi de l'email modifié.