codage UF8 dans mail suite formulaire

gaeil28
Invité n'ayant pas de compte PHPfrance

17 nov. 2013, 13:43

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

Code : Tout sélectionner

<meta charset="utf-8">
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 &eacute;.
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 ?
merci pour votre aide
Gérard
voici le code complet
<?php
//*************************
 //Définitions des variables
 //*************************
 
 $debug = 1; //0=off / 1=on
 $notification_mail = 1; //0=non / 1=oui 
 $adresse_mail = "[email protected]";
 $provenance_mail = "From: mon site";
 
 
 // Recupere le pseudo
 $pseudo = $_POST['pseudo'];
 //Récupère le commentaire
 $commentaire = $_POST['commentaire'];

 //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 <br /> et le \' par '
   $commentaire=eregi_replace("\r\n","<br />",$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 "<br /><br />Commentaire vide ou redondant!!!<br />";	
	  }   
   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><br />
     	    <input type="text" name="pseudo" class="pseudo-box" value="'.$pseudo.'" placeholder="Entrez votre pseudo"><br />
 <label class="com-style">Votre commentaire :</label><br />
   			<textarea name="commentaire" cols="50" rows="5" class="com-box" placeholder="Entrez votre commentaire - 5 lignes maxi..."></textarea>
			</textarea><br />
 <input class="button-style" type="submit" name="submit" value="Poster" />
 </form>
 ';
?>

Modifié en dernier par moogli le 18 nov. 2013, 00:07, modifié 1 fois.
Raison : bbcode php

gaeil28
Invité n'ayant pas de compte PHPfrance

18 nov. 2013, 19:35

Bonsoir,
je fais un petit Up..?
je précise que le script fonctionne très bien tout seul (sur une page html classique) C'est à dire qu'on reçoit bien le mail avec les accents, et les commentaires sont affichés avec les accents.
Le problème de la réception du mail avec des caractères bizarres au lieu des accents se produit quand j'intègre ce script dans une page html/php (fonction Include).
Le fichier dans lequel il est inclus est codé en UTF8 par la balise META

Code : Tout sélectionner

<meta charset="utf-8">
j'ai essayé d'encoder au niveau de l'envoi de l'email par des instructions du type

Code : Tout sélectionner

$headers ='From: "Contact"<[email protected]>'."\n"; $headers .='Content-Type: text/html; charset="UTF-8"'."\n"; $headers .='Content-Transfer-Encoding: 8bit';
mais c'est toujours pareil..mail sans caractère accentués...
y a-t-il un(e) balèze qui saura résoudre l'énigme ?
merci
Gérard

ViPHP
AB
ViPHP | 5818 Messages

18 nov. 2013, 20:37

Faut bien suivre toutes les étapes de ce tuto. Notamment l'entête apache en php : header('Content-Type: text/html; charset=UTF-8'); et le fait que ton fichier doit être enregistré en choisissant l'encodage UTF-8 (sans inclure une signature unicode BOM).

gaeil28
Invité n'ayant pas de compte PHPfrance

24 nov. 2013, 13:42

Bonjour,
OK Merci
GG