PHP utf-8 ne fonctionne pas toujours...
Lordclaymore
-
EminoMeneko Messages postés 2435 Date d'inscription Statut Membre Dernière intervention -
EminoMeneko Messages postés 2435 Date d'inscription Statut Membre Dernière intervention -
Salut, j'ai fait un formulaire qui passe ses infos à la feuille traitement. Celle-ci génère un rapport contenant les informations, qui est envoyé par courriel.
Présentement ma page est codée en utf, je l'ai essayé aussi en iso (j'ai aussi essayé toute la tralée de fonctions pour convertir en utf). Le bug est que certains hébergeurs (notamment vidéotron et gmail) reçoivent un rapport comme si le UTF n'était pas géré.
En revanche, sur yahoo et hotmail, tout rentre parfaitement.
S'il y a un petit cerveau qui pourrait m'aider j'apprécierais grandement !!!!
Présentement ma page est codée en utf, je l'ai essayé aussi en iso (j'ai aussi essayé toute la tralée de fonctions pour convertir en utf). Le bug est que certains hébergeurs (notamment vidéotron et gmail) reçoivent un rapport comme si le UTF n'était pas géré.
En revanche, sur yahoo et hotmail, tout rentre parfaitement.
S'il y a un petit cerveau qui pourrait m'aider j'apprécierais grandement !!!!
A voir également:
- PHP utf-8 ne fonctionne pas toujours...
- Clé windows 8 - Guide
- Mixcraft 8 - Télécharger - Création musicale
- Internet explorer 8 - Télécharger - Navigateurs
- Easy php - Télécharger - Divers Web & Internet
- Windows 8 pro - Télécharger - Systèmes d'exploitation
2 réponses
C'est effectivement très intéressant que ça marche chez Yahoo! et Hotmail mais pas chez Google ou Vidéotron.
Le problème semblerait être extérieur à ton code mais il se peut aussi qu'au font tu ne respecterais pas bien un standard.
Dans tous les cas c'est assez intéressant comme problème.
Est-ce que tu renseigne bien l'encodage utilisé :
Dans les entêtes SMTP ?
Si le mail est au format HTML, dans la balise <meta>
Comme ceci
ou comme cela
Consultes aussi la doc de PHP
https://www.php.net/manual/en/function.mail.php
Le problème semblerait être extérieur à ton code mais il se peut aussi qu'au font tu ne respecterais pas bien un standard.
Dans tous les cas c'est assez intéressant comme problème.
Est-ce que tu renseigne bien l'encodage utilisé :
Dans les entêtes SMTP ?
Si le mail est au format HTML, dans la balise <meta>
Comme ceci
<meta name= "charset" content= "utf-8">
ou comme cela
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Consultes aussi la doc de PHP
https://www.php.net/manual/en/function.mail.php
Voici mon code :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Validation de l'envoi</title>
</head>
<body>
<?php
$nom= $_POST['nom'];
$dateRapport=$_POST['daterapport'];
$courrielEtudiant=$_POST['courrielEtudiant'];
$courrielSup=$_POST['courrielSup'];
$heureArrivee=$_POST['heureArrivee'];
$heureDepart=$_POST['heureDepart'];
$total=$_POST['total'];
$taches=$_POST['taches'];
$connaissances=$_POST['connaissances'];
$aime=$_POST['aime'];
$pasAime=$_POST['pasAime'];
$senti= $_POST['senti'];
$incompetent=$_POST['incompetent'];
$competent=$_POST['competent'];
$informations=$_POST['informations'];
$commentaires=$_POST['commentaires'];
$sujet = "Journal de bord";
$From = "MIME-version: 1.0\n";
$From .= "Content-type: text/html; charset=utf-8' \n";
$From .= "From: $nom <$courrielEtudiant>'\r\n";
$message = stripslashes($message);
$message .= "<b>JOURNAL DE BORD</b> <br>";
$message .= " <b>Stagiaire :</b> $nom <br>";
$message .= " <b>Courriel :</b> $courrielEtudiant <br>";
$message .= "<hr>";
$message .= " <b>Date :</b> $_POST[daterapport]<br>";
$message .= " <b>Heure d'arrivée :</b> $heureArrivee - <b>Heure de départ :</b> $heureDepart - <b>TOTAL :</b> $total heures <br>";
$message .= "<hr>";
$message .= " <b>Tâches exécutées dans la journée :</b> <br>";
$message .= "$taches <br>";
$message .= "<hr>";
$message .= " <b>Qualités ou connaissances, en lien avec la formation, mises à profit aujourd'hui :</b> <br>";
$message .= "$connaissances <br>";
$message .= "<hr>";
$message .= "<b> Élément que l'étudiant a préféré dans sa journée :</b> <br>";
$message .= "$aime <br> ";
$message .= "<hr>";
$message .= " <b>Élément que l'étudiant a le moins aimé dans sa journée :</b> <br> ";
$message .= "$pasAime <br> ";
$message .= "<hr>";
$message .= "<b>Dans l'exercice de ses fonctions, l'étudiant s'est senti :</b> <br>";
$message .= "$senti <br> ";
$message .= "<hr>";
$message .= "<b> Élément pour lequel l'étudiant ne s'est pas senti compétent : </b><br> ";
$message .= "$incompetent <br> ";
$message .= "<hr>";
$message .= " <b>Élément pour lequel l'étudiant s'est senti compétent : </b><br>";
$message .= "$competent <br> ";
$message .= "<hr>";
$message .= "<b> L'étudiant aurait besoin d'un complément d'informations sur : </b> <br>";
$message .= "$informations <br>";
$message .= "<hr>";
$message .= " <b> Commentaires : </b><br> ";
$message .= "$commentaires <br>";
if(mail($courrielSup,$sujet, $message,$From))
{
echo "Le journal de bord a été envoyé à $courrielSup, $nom, $taches " ;
}
else
{
echo 'Votre journal de bord n\'a pu être envoyé';
}
mail($courrielEtudiant, $sujet, $message, $From)
?>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Validation de l'envoi</title>
</head>
<body>
<?php
$nom= $_POST['nom'];
$dateRapport=$_POST['daterapport'];
$courrielEtudiant=$_POST['courrielEtudiant'];
$courrielSup=$_POST['courrielSup'];
$heureArrivee=$_POST['heureArrivee'];
$heureDepart=$_POST['heureDepart'];
$total=$_POST['total'];
$taches=$_POST['taches'];
$connaissances=$_POST['connaissances'];
$aime=$_POST['aime'];
$pasAime=$_POST['pasAime'];
$senti= $_POST['senti'];
$incompetent=$_POST['incompetent'];
$competent=$_POST['competent'];
$informations=$_POST['informations'];
$commentaires=$_POST['commentaires'];
$sujet = "Journal de bord";
$From = "MIME-version: 1.0\n";
$From .= "Content-type: text/html; charset=utf-8' \n";
$From .= "From: $nom <$courrielEtudiant>'\r\n";
$message = stripslashes($message);
$message .= "<b>JOURNAL DE BORD</b> <br>";
$message .= " <b>Stagiaire :</b> $nom <br>";
$message .= " <b>Courriel :</b> $courrielEtudiant <br>";
$message .= "<hr>";
$message .= " <b>Date :</b> $_POST[daterapport]<br>";
$message .= " <b>Heure d'arrivée :</b> $heureArrivee - <b>Heure de départ :</b> $heureDepart - <b>TOTAL :</b> $total heures <br>";
$message .= "<hr>";
$message .= " <b>Tâches exécutées dans la journée :</b> <br>";
$message .= "$taches <br>";
$message .= "<hr>";
$message .= " <b>Qualités ou connaissances, en lien avec la formation, mises à profit aujourd'hui :</b> <br>";
$message .= "$connaissances <br>";
$message .= "<hr>";
$message .= "<b> Élément que l'étudiant a préféré dans sa journée :</b> <br>";
$message .= "$aime <br> ";
$message .= "<hr>";
$message .= " <b>Élément que l'étudiant a le moins aimé dans sa journée :</b> <br> ";
$message .= "$pasAime <br> ";
$message .= "<hr>";
$message .= "<b>Dans l'exercice de ses fonctions, l'étudiant s'est senti :</b> <br>";
$message .= "$senti <br> ";
$message .= "<hr>";
$message .= "<b> Élément pour lequel l'étudiant ne s'est pas senti compétent : </b><br> ";
$message .= "$incompetent <br> ";
$message .= "<hr>";
$message .= " <b>Élément pour lequel l'étudiant s'est senti compétent : </b><br>";
$message .= "$competent <br> ";
$message .= "<hr>";
$message .= "<b> L'étudiant aurait besoin d'un complément d'informations sur : </b> <br>";
$message .= "$informations <br>";
$message .= "<hr>";
$message .= " <b> Commentaires : </b><br> ";
$message .= "$commentaires <br>";
if(mail($courrielSup,$sujet, $message,$From))
{
echo "Le journal de bord a été envoyé à $courrielSup, $nom, $taches " ;
}
else
{
echo 'Votre journal de bord n\'a pu être envoyé';
}
mail($courrielEtudiant, $sujet, $message, $From)
?>
</body>
</html>
Apparemment tu as fais tout ce qu'il faut de ton côté.
Est-ce que tu pourrais t'envoyer un mail et vérifier dans l'en-tête du mail que le charset est bien défini. ?
Je ne vois pas où le problème se cache. J'aurais vraiment tendance à dire que le problème ne vient pas de toi mais c'est bizarre que Google ait des problèmes vu que je reçois bien mes mails en japonais... :/
Juste une remarque en passant. Tu dois bien t'amuser à analyser ton code HTML. Tu ne fais jamais de saut de ligne ?
Un <br/> fait un saut de ligne sur la page mais pas dans le code.
Quand je faisais du PHP je me donnais la peine de faire en sorte qu'il y ait des indentations et des sauts de ligne. C'était plus ou moins fastidieux mais au moins j'avais un code propre et facile à analyser.
C'est juste un petit conseil perso.
Est-ce que tu pourrais t'envoyer un mail et vérifier dans l'en-tête du mail que le charset est bien défini. ?
Je ne vois pas où le problème se cache. J'aurais vraiment tendance à dire que le problème ne vient pas de toi mais c'est bizarre que Google ait des problèmes vu que je reçois bien mes mails en japonais... :/
Juste une remarque en passant. Tu dois bien t'amuser à analyser ton code HTML. Tu ne fais jamais de saut de ligne ?
Un <br/> fait un saut de ligne sur la page mais pas dans le code.
Quand je faisais du PHP je me donnais la peine de faire en sorte qu'il y ait des indentations et des sauts de ligne. C'était plus ou moins fastidieux mais au moins j'avais un code propre et facile à analyser.
C'est juste un petit conseil perso.