Vous n'êtes pas identifié(e).
Bonjour,
Je n'ai pas assez de connaissance en PHP pour résoudre mon problème.
J'ai un script qui permet de laisser un commentaire sur mon site. il est très simple et me convient parfaitement. Il utilise juste un fichier texte qui contient les commentaires.
Tout allait bien jusqu'à ce qu je décide de coder mes page en UFT8 donc dans l'entête de ma page html
le commentaire est parfaitement publié sur la page au niveau des accents. Le fichier texte qui contient les commentaires comporte les accents et non le caractères ascii du genre é.
Mon problème se situe au niveau du mail que je reçois. Les caractères accentués ne s'affichent pas correctement et sont donc remplacés par exemple pour Gérard par Gérard .
que devrais-je modifier pour que la mail affiche bien les caractères accentués ?
merci pour votre aide
Gérard
voici le code complet (en plus, ça peut servir à ceux qui cherche un script du genre)
//Extrait le nom de la page et l'utilise pour le nom du fichier de sauvegarde en ".txt"
$script_name = $_SERVER['SCRIPT_NAME'];
$pos = strrpos($script_name, "/");
$path = substr($script_name, $pos+1, strlen($script_name) - $pos - 5).'.txt';
//Affichage du formulaire
//Enregistre et affiche les commentaires
if(isset($_POST['submit']))
save_comment($path,$pseudo,$commentaire);
else
//Affiche les commentaires
if(file_exists($path))
echo affiche_commentaires($path);
//*********
//Fonctions
//*********
function affiche_commentaires($path)
{
global $debug;
$handletmp = fopen($path,"r");
$tableau_content = file($path);
fclose($handletmp);
//***************************
//Affichage des commmentaires
//***************************
// boucle sur tous les elements
$HTML = '<div class="title-com-wrapper">Vos commentaires</div>';
for($i=0; $i < count($tableau_content); $i++)
{
if($i%2==0)
{
$HTML .= '<div class="user-wrapper">';
$HTML .= $tableau_content[$i].'</div>';
}
else
{
$HTML .= '<div class="com-user-wrapper">';
$HTML .= $tableau_content[$i].'</div>';
}
}
$HTML .= '</div>';
return $HTML;
}
function save_comment($path,$pseudo,$commentaire)
{
//*****************************
//Enregistrement du commentaire
//*****************************
global $debug;
global $notification_mail;
global $adresse_mail;
global $provenance_mail;
if(file_exists($path))
{
$handle = fopen($path,"r");
$tableau_content = file($path);
fclose($handle);
}
//remplace le retour à la ligne par
et le \' par '
$commentaire=eregi_replace("\r\n","
",$commentaire);
$commentaire=eregi_replace("\\\'","'",$commentaire);
if(($commentaire != "")&&(($commentaire . "\r\n") != $tableau_content[count($tableau_content)-1]))
{
$handle = fopen($path,"w");
for($i=0;$i < count($tableau_content); $i++)
{
if(($tableau_content[$i] != "")&&($tableau_content[$i] != "\r\n"))
fwrite($handle,$tableau_content[$i]);
}
$str_out = '<span class="post-pseudo-style">' .$pseudo." </span> le ".date('d.m.y - H:i:s')."\r\n".$commentaire."\r\n";
fwrite($handle,$str_out);
fclose($handle);
if($notification_mail == 1)
{
$message = $pseudo." le ".date('d.m.y - H:i:s')."\r\n".$commentaire."\r\nhttp://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
mail($adresse_mail,"Nouveau commentaire de ".$pseudo,$message,$provenance_mail);
}
}
else
{
if($debug == 1)
echo "
Commentaire vide ou redondant!!!
";
}
echo Affiche_commentaires($path);
}
echo '
<div id="conteneur">
<div class="title-post-wrapper">Laisser un commentaire</div>
<form enctype="multipart/form-data" name="comment_form" action="'.$_SERVER['PHP_SELF'].'" method="POST">
<label class="pseudo-style" for="pseudo-box">Pseudo : </label>
<input type="text" name="pseudo" class="pseudo-box" value="'.$pseudo.'" placeholder="Entrez votre pseudo">
<label class="com-style">Votre commentaire :</label>
<textarea name="commentaire" cols="50" rows="5" class="com-box" placeholder="Entrez votre commentaire - 5 lignes maxi..."></textarea>
</textarea>
<input class="button-style" type="submit" name="submit" value="Poster" />
</form>
';
?>
Dernière modification par Gaeil28 (21-11-2013 10:37:39)
Hors ligne
Bonjour,
Il vous faut préciser dans l'entête de votre mail l'encodage utilisé pour son contenu.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
bonjour,
oui depuis mon post j'ai essayé pas mal de choses pour coder le mail comme par exemple
et ensuite
ou "plus simple"
et ensuite
mais rien dans ces essais ne fonctionne (je veux dire que je reçois toujours le mail sans les caractères accentués... Gérard au lieu de Gérard.)
c'est vraiment bizarre, car si j'exécute ce script avec un include dans un fichier html/php classique (non codé en UTF8, ça fonctionne...
mais là je l'exécute à partir d'une page html/php dont l'entête précise
et c'est là que ça ne fonctionne plus...
histoire de fou ?
Gérard
Hors ligne
Bonjour,
Tout simplement parce qu'il ne suffit pas de dire qu'une page est encodée en UTF-8 pour qu'elle le soit
Il faut de plus que cette déclaration d'environnement d'encodage soit déclarée au niveau de votre php.ini pour que php interprète le contenu avec le bon encodage. Cela vous fait donc 3 points à vérifier.
Pour ce qui est de cette vérification au niveau de votre fichier, prenez un simple applicatif comme Notepad++ et réenregistrez votre fichier en UTF-8 sans BOM.
Pour ce qui est de votre encodage entête mail je vous conseillerais plutôt d'encoder en text/html plutôt que text/plain et de préciser l'encodage de transmission pour plus de stabilité comme suit:
Pensez à marquer le sujet comme résolu à la fin
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonjour,
OK merci.
en fait c'est vrai qu'il y a un peu tout et n'importe quoi au niveau encodage des différents fichiers. Certains sont utf8, d'autres en ANSI...
il faut donc que je reprenne calmement mon code...:/
question 1
Bien qu'ayant lu pas mal de conseils sur l'encodage (ou le codage ?) des caractères, j'ai du mal à comprendre.:(
en supposant que le serveur interprète bien du utf8 (par exemple grâce à une instruction dans le php.ini)
pour un fichier "normal" en HTML5
Si je mets en en tête une instruction du genre
est-ce que je peux mettre directement des accents dans les balises et le texte mon fichier, par exemple
ou dois mettre ?
question 2
J'ai codé le script commentaires.php en utf8 sans BOM (via Notepad ++)
j'ai ajouté
.....et un peu plus bas
mail($adresse_mail,"Nouveau commentaire de ".$pseudo,$message,$provenance_mail,$headers);
J'ai codé (via notepad ++) le fichier php qui contient le script en utf8 sans BOM
avec en en-tête
J'ai mis à la racine du site un php.ini qui contient les infos suivantes (il est complet ci-dessous)
et bien c'est toujours pareil..voici l'en-tête du mail que je reçois
X-Amavis-Alert: BAD HEADER SECTION, Non-encoded 8-bit data (char C3 hex):
donc je ne vois pas....
merci
Gérard
Dernière modification par Gaeil28 (19-11-2013 16:59:04)
Hors ligne
Bonjour,
Pour répondre à votre première question oui.
En ce qui concerne la configuration de php, commentez (désactivez) les directives mbstring vous n'en avez pas besoin.
Relancez apache, et essayez à nouveau
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
merci.
oui effectivement j'ai remplacé par cette seule ligne (plus appropriée) dans le php.ini
j'ai aussi été voir cet excellent tuto (et suivi les préconisations à la lettre..)
OpenClassroom
Le problème n'est pas résolu, ....
car le fichier exécuté seul (donc sans aucune instruction html de codification) ça marche. le bazard c'est quand on commence à mettre les entêtes HTML
ça donne dans le mail
Gérard le 20.11.13 - 09:59:59
commentaire de réponse fichier gchtml.php
dans le tuto il y a comme "consigne"
"é", "î", "Ã" etc. => la chaine de caractères est encodée en UTF-8 mais le navigateur croit avoir affaire à de l'ISO-8859-1 (probablement parce que votre page dit au navigateur qu'elle utilise l'ISO-8859-1). Utilisez la fonction utf8_decode sur la chaine de caractères posant problème si elle est issue d'une variable PHP.
il faudrait pour cela que je code comme indiqué les variables destinées au mail..
bon je vais creuser...
Gérard
merci pour toutes ces infos.
Hors ligne
Bonjour,
Concernant l'entête au niveau html la bonne écriture c'est
Cordialement,
Jc
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
au fait...la réponse oui, n'est pas claire...
Bonjour,
Pour répondre à votre première question oui.
En ce qui concerne la configuration de php, commentez (désactivez) les directives mbstring vous n'en avez pas besoin.
Relancez apache, et essayez à nouveau
oui je suis obligé de mettre é ou oui je dois mettre é ?
merci
Hors ligne
Bonjour,
Concernant l'entête au niveau html la bonne écriture c'est
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta content="fr-fr" http-equiv="Content-Language" >
Cordialement,
Jc
Moi je veux bien, vu que je ne suis pas un spécialiste, mais alors que pensez de ça ?
Openclassroom Codage d'une page
Dernière modification par Gaeil28 (20-11-2013 15:06:57)
Hors ligne
Que penser de ça?
Que c'est juste un tuto minimaliste de première approche qui explique les bases. Il ne tient pas compte du standard à 100%.
Avez-vous essayé et regardé si votre problème est résolu? Avez-vous bien redémarré votre serveur apache après vos modifications dans votre php.ini?
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonjour, et merci pour vos conseils et aides diverses.
merci
Gérard
Dernière modification par Gaeil28 (21-11-2013 10:48:46)
Hors ligne