pb encodage - formulaire de contact

pb encodage - formulaire de contact - PHP - Programmation

Marsh Posté le 17-02-2010 à 14:25:34    

Bonjour,
 
J'ai réalisé un formulaire de contact pour mon site. Il fonctionne correctement, le mail est bien envoyé mais à la réception dans mon client de messagerie, les caractères spéciaux tels que "à", "é" sont remplacés par "é" ou encore Ã". Quel est le bout de code à rajouter pour encoder correctement le mail de mon formulaire ?
 
voici mon code :
 

Code :
  1. <?php
  2. /*
  3.  ********************************************************************************************
  4.  CONFIGURATION
  5.  ********************************************************************************************
  6. */
  7. // destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
  8. $destinataire = 'nom@fai.com';
  9. // Action du formulaire (si votre page a des paramètres dans l'URL)
  10. // si cette page est index.php?page=contact alors mettez index.php?page=contact
  11. // sinon, laissez vide
  12. $form_action = '';
  13. // Messages de confirmation du mail
  14. $message_envoye = "Votre message a bien été envoyé";
  15. $message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
  16. // Message d'erreur du formulaire
  17. $message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
  18. /*
  19.  ********************************************************************************************
  20.  FIN DE LA CONFIGURATION
  21.  ********************************************************************************************
  22. */
  23. /*
  24.  * cette fonction sert à nettoyer et enregistrer un texte
  25.  */
  26. function Rec($text)
  27. {
  28.  $text = trim($text); // delete white spaces after & before text
  29.  if (1 === get_magic_quotes_gpc())
  30.  {
  31.   $stripslashes = create_function('$txt', 'return stripslashes($txt);');
  32.  }
  33.  else
  34.  {
  35.   $stripslashes = create_function('$txt', 'return $txt;');
  36.  }
  37.  // magic quotes ?
  38.  $text = $stripslashes($text);
  39.  $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
  40.  $text = nl2br($text);
  41.  return $text;
  42. };
  43. /*
  44.  * Cette fonction sert à vérifier la syntaxe d'un email
  45.  */
  46. function IsEmail($email)
  47. {
  48.  $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
  49.  return (eregi($pattern,$email)) ? true : false;
  50. };
  51. $err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin
  52. // si formulaire envoyé, on récupère tous les champs. Sinon, on initialise les variables.
  53. $civilite = (isset($_POST['civilite'])) ? Rec($_POST['civilite'])     : '';
  54. $nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : '';
  55. $prenom  = (isset($_POST['prenom']))  ? Rec($_POST['prenom'])  : '';
  56. $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
  57. $telephone     = (isset($_POST['telephone']))     ? Rec($_POST['telephone'])     : '';
  58. $lieu     = (isset($_POST['lieu']))     ? Rec($_POST['lieu'])     : '';
  59. $secteur     = (isset($_POST['secteur']))     ? Rec($_POST['secteur'])     : '';
  60. $objet   = (isset($_POST['objet']))   ? Rec($_POST['objet'])   : '';
  61. $message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
  62. if (isset($_POST['envoi']))
  63. {
  64.  // On va vérifier les variables et l'email ...
  65.  $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
  66.  $err_formulaire = (IsEmail($email)) ? false : true;
  67.  if (($nom != '') && ($email != '') && ($objet != '') && ($message != ''))
  68.  {
  69.   // les 4 variables sont remplies, on génère puis envoie le mail
  70.   $headers = 'From: '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n";
  71.   $contenu = "Civilit&eacute; : ".stripslashes($civilite)."\n\n";
  72.       $contenu .= "Nom : ".stripslashes($nom)."\n\n";
  73.       $contenu .= "Pr&eacute;nom : ".stripslashes($prenom) ."\n\n";
  74.       $contenu .= "T&eacute;l&eacute;phone : ".stripslashes($telephone) ."\n\n";
  75.       $contenu .= "Lieu d'implantation g&eacute;ographique : ".stripslashes($lieu) ."\n\n\n";
  76.       $contenu .= "Message :"."\n\n".stripslashes( $message);
  77.   $cible = $destinataire;
  78.   // Remplacement de certains caractères spéciaux
  79.   $contenu = html_entity_decode($contenu);
  80.   $contenu = str_replace('&#039;',"'",$contenu);
  81.   $contenu = str_replace('&#8217;',"'",$contenu);
  82.   $contenu = str_replace('<br>','',$contenu);
  83.   $contenu = str_replace('<br />','',$contenu);
  84.   // Envoi du mail
  85.   if (mail($cible, $objet, $contenu, $headers))
  86.   {
  87.    echo '<p>'.$message_envoye.'</p>'."\n";
  88.   }
  89.   else
  90.   {
  91.    echo '<p>'.$message_non_envoye.'</p>'."\n\n\n";
  92.    echo "<a href='http://www.entreprendre.midipyrenees.fr/spip.php?auteur1003'>Retourner au formulaire de contact</a>";
  93.   };
  94.  }
  95.  else
  96.  {
  97.   // une des 3 variables (ou plus) est vide ...
  98.   echo '<p>'.$message_formulaire_invalide.' <a href="contact.php">Retour au formulaire</a></p>'."\n";
  99.   $err_formulaire = true;
  100.  };
  101. }; // fin du if (!isset($_POST['envoi']))
  102. if (($err_formulaire) || (!isset($_POST['envoi'])))
  103. {
  104.  // afficher le formulaire
  105.  echo '<form style="padding: 5px 5px 5px 5px;" id="contact" method="post" action="'.$form_action.'">'."\n";
  106.  echo ' <fieldset><legend>Vos coordonn&eacute;es</legend>'."\n";
  107.  echo '  <p>'."\n";
  108.  echo '   <label for="civilite">Civilit&eacute; :</label>'."\n";
  109.  echo '   <select id="civilite" name="civilite" value="'.stripslashes($civilite).'" tabindex="1" />
  110.      <option selected="selected">M.</option>
  111.      <option>Mme</option>
  112.      <option>Melle</option>
  113.          </select>'."\n";
  114.  echo '  </p>'."\n";
  115.  echo '  <p>'."\n";
  116.  echo '   <label for="nom">Nom :</label>'."\n";
  117.  echo '   <input type="text" id="nom" name="nom" value="'.stripslashes($nom).'" tabindex="2" />'."\n";
  118.  echo '  </p>'."\n";
  119.  echo '  <p>'."\n";
  120.  echo '   <label for="prenom">Pr&eacute;nom :</label>'."\n";
  121.  echo '   <input type="text" id="prenom" name="prenom" value="'.stripslashes($prenom).'" tabindex="3" />'."\n";
  122.  echo '  </p>'."\n";
  123.  echo '  <p>'."\n";
  124.  echo '   <label for="email">Email :</label>'."\n";
  125.  echo '   <input type="text" id="email" name="email" value="'.stripslashes($email).'" tabindex="4" />'."\n";
  126.  echo '  </p>'."\n";
  127.  echo '  <p>'."\n";
  128.  echo '   <label for="telephone">T&eacute;l&eacute;phone :</label>'."\n";
  129.  echo '   <input type="text" id="telephone" name="telephone" value="'.stripslashes($telephone).'" tabindex="5" />'."\n";
  130.  echo '  </p>'."\n";
  131.  echo '  <p>'."\n";
  132.  echo '   <label for="lieu">Lieu d\'implantation g&eacute;ographique :</label>'."\n";
  133.  echo '   <input type="text" id="lieu" name="lieu" value="'.stripslashes($lieu).'" tabindex="6" />'."\n";
  134.  echo '  </p>'."\n";
  135.  echo '   <label for="secteur">Secteur d\'activit&eacute; :</label>'."\n";
  136.  echo '   <select id="secteur" name="secteur" value="'.stripslashes($secteur).'" tabindex="7" />
  137.      <option selected="selected">Textile</option>
  138.      <option>Batiment</option>
  139.      <option>TIC</option>
  140.          </select>'."\n";
  141.  echo '  </p>'."\n";
  142.  echo ' </fieldset>'."\n";
  143.  echo ' <fieldset><legend>Votre message :</legend>'."\n";
  144.  echo '  <p>'."\n";
  145.  echo '   <label for="objet">Objet :</label>'."\n";
  146.  echo '   <input type="text" id="objet" name="objet" value="'.stripslashes($objet).'" tabindex="8" />'."\n";
  147.  echo '  </p>'."\n";
  148.  echo '  <p>'."\n";
  149.  echo '   <label style="float:left; padding-right:4px" for="message">Message :</label>'."\n";
  150.  echo '   <textarea id="message" name="message" tabindex="9" cols="30" rows="8">'.stripslashes($message).'</textarea>'."\n";
  151.  echo '  </p>'."\n";
  152.  echo ' </fieldset>'."\n";
  153.  echo ' <div style="text-align:center;"><input type="submit" name="envoi" value="Envoyer le formulaire !" /></div>'."\n";
  154.  echo '</form>'."\n";
  155. };
  156. ?>


 
J'ai essayé avec htmlentities et écumé plusieurs forums, je n'ai rien trouvé... :??:  
 
Je débute en PHP et je m'y casse les dents là.
 
 
D'avance merci pour votre réponse

Reply

Marsh Posté le 17-02-2010 à 14:25:34   

Reply

Marsh Posté le 17-02-2010 à 14:40:11    

probleme d'encodage et d'entete de fichier  
UTF8 <-> ISO

Reply

Marsh Posté le 17-02-2010 à 14:51:27    

Merci pour ta réponse.
J'imagine bien que ça vient de là. Tu veux dire qu'il faut que je change l'encodage de mon site ? ça va le mettre en l'air au niveau des autres pages pour les caractères spéciaux... , il n'y a pas une ligne de code à rajouter directement dans la page de mon formulaire sans avoir à toucher au reste du site ?

Reply

Marsh Posté le 17-02-2010 à 15:59:29    

petite précision ! je réalise mon site sous SPIP (si ça peut avoir une incidence...)

Reply

Marsh Posté le 17-02-2010 à 16:42:44    

Hello
si tu essaies :

Code :
  1. $text = htmlentities(...)


 
au lieu de

Code :
  1. $text = htmlspecialchars(...)

?


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 17-02-2010 à 17:03:51    

NewsletTux a écrit :

Hello
si tu essaies :

Code :
  1. $text = htmlentities(...)


 
au lieu de

Code :
  1. $text = htmlspecialchars(...)

?


 
Merci pour ta réponse.
 
Le modification que tu proposes ne fonctionne pas, je me retrouve avec des caractères de ce type à présent "&Atilde;&copy;" (pour é).

Reply

Marsh Posté le 17-02-2010 à 20:58:28    

OK. Quel est l'encodage de ta page ?


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 18-02-2010 à 11:58:27    

NewsletTux a écrit :

OK. Quel est l'encodage de ta page ?


 
Salut,
 
J'ai avancé dans mon formulaire.
 
J'ai rajouté la ligne :
 

Code :
  1. $headers .= 'Content-type: text/plain; charset=UTF-8' . "\r\n";


 
dans mon code.
 
L'encodage est bon à présent sauf pour l'objet du mail qui prend le mauvais encodage pour les caractères spéciaux. J'ai essayé de comprendre pourquoi mais je sèche. D'où cela peut-il venir ?
 
Merci d'avance  

Reply

Marsh Posté le 18-02-2010 à 16:45:14    

c'est exactement ce que j'allais te suggérer.  et ça ne prend pas en charge l'objet ?
 
Regarde par là : http://bitprison.net/php_mail_utf- [...] nd_message


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 19-02-2010 à 10:47:44    

NewsletTux a écrit :

c'est exactement ce que j'allais te suggérer.  et ça ne prend pas en charge l'objet ?

 

Regarde par là : http://bitprison.net/php_mail_utf- [...] nd_message

 

J'ai enfin trouvé, j'ai rajouté la ligne

Code :
  1. $objet = utf8_decode($objet);
 

Merci tout de même pour ton lien (qui est très intéressant) et ton aide !


Message édité par Antho03 le 19-02-2010 à 10:48:30
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed