Caractères spéciaux et formulaire

Caractères spéciaux et formulaire - PHP - Programmation

Marsh Posté le 10-05-2009 à 20:32:30    

Bonjour à tous,
j'ai fait un formulaire de contact sur mon site internet, mais le problème c'est que les caractères speciaux lorsque je fait des tests d'envoi dans ma boîte mail s'affichent mal.
 
Par exemple, si j'envoi le message suivant:
 
Bonjour,
je souhaiterai être contacté à l'email suivant:
contact <contact@contact.fr>
 
merci beaucoup
john
 
Lorsque je recoit le message dans ma boite de reception d'email, il s'affiche comme cela:
 
Bonjour,<br />
je souhaiterai être contacté à l&#039;email suivant:<br />
contact &lt;contact@contact.fr&gt;<br />
<br />
merci beaucoup<br />
john
 
Voici le code de traitement du formulaire:
 

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 = 'XXXXXXX@free.fr';
  9. // copie ? (envoie une copie au visiteur)
  10. $copie = 'oui'; // 'oui' ou 'non'
  11. // Messages de confirmation du mail
  12. $message_envoye = "Votre message nous est bien parvenu ! Vous allez recevoir une copie de votre message dans votre boîte mail.";
  13. $message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
  14. // Messages d'erreur du formulaire
  15. $message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.php\">envoyer le formulaire</a>.";
  16. $message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
  17. /*
  18.  ********************************************************************************************
  19.  FIN DE LA CONFIGURATION
  20.  ********************************************************************************************
  21. */
  22. // on teste si le formulaire a été soumis
  23. if (!isset($_POST['envoi']))
  24. {
  25.  // formulaire non envoyé
  26.  echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
  27. }
  28. else
  29. {
  30.  /*
  31.   * cette fonction sert à nettoyer et enregistrer un texte
  32.   */
  33.  function Rec($text)
  34.  {
  35.   $text = trim($text); // delete white spaces after & before text
  36.   if (1 === get_magic_quotes_gpc())
  37.   {
  38.    $stripslashes = create_function('$txt', 'return stripslashes($txt);');
  39.   }
  40.   else
  41.   {
  42.    $stripslashes = create_function('$txt', 'return $txt;');
  43.   }
  44.   // magic quotes ?
  45.   $text = $stripslashes($text);
  46.   $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
  47.   $text = nl2br($text);
  48.   return $text;
  49.  };
  50.  /*
  51.   * Cette fonction sert à vérifier la syntaxe d'un email
  52.   */
  53.  function IsEmail($email)
  54.  {
  55.   $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
  56.   return (eregi($pattern,$email)) ? true : false;
  57.  };
  58.  // formulaire envoyé, on récupère tous les champs.
  59.  $monsieur = (isset($_POST['monsieur']))   ? Rec($_POST['monsieur'])   : '';
  60.  $madame = (isset($_POST['madame'])) ? Rec($_POST['madame']) : '';
  61.  $moiselle = (isset($_POST['moiselle'])) ? Rec($_POST['moiselle']) : '';
  62.  $nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : '';
  63.  $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
  64.  $message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
  65.         $telephone = (isset($_POST['tel']))   ? Rec($_POST['tel'])   : '';
  66.  $ville = (isset($_POST['ville'])) ? Rec($_POST['ville']) : '';
  67.  $societe = (isset($_POST['societe'])) ? Rec($_POST['societe']) : '';
  68.  // On va vérifier les variables et l'email ...
  69.  $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
  70.  if (($nom != '') && ($email != '') && ($message != '') && ($telephone != '') && ($ville != '') && ($societe != ''))
  71.  {
  72.   // les 4 variables sont remplies, on génère puis envoie le mail
  73.   $headers = 'De: '.$nom.' <'.$email.'>' . "\r\n" . 'Téléphone: '.$telephone.'' . "\r\n" . 'Société: '.$societe.'' . "\r\n" . 'Message: '.$message.'' . "\r\n";           
  74.   // envoyer une copie au visiteur ?
  75.   if ($copie == 'oui')
  76.   {
  77.    $cible = $destinataire.','.$email;
  78.   }
  79.   else
  80.   {
  81.    $cible = $destinataire;
  82.   };
  83.   // Remplacement de certains caractères spéciaux
  84.   $message = str_replace("&#039;","'",$message);
  85.   $message = str_replace("&#8217;","'",$message);
  86.   $message = str_replace("&quot;",'"',$message);
  87.   $message = str_replace('<br>','',$message);
  88.   $message = str_replace('<br />','',$message);
  89.   $message = str_replace("&lt;","<",$message);
  90.   $message = str_replace("&gt;",">",$message);
  91.   $message = str_replace("&amp;","&",$message);
  92.   // Envoi du mail
  93.   if (mail($cible, $message, $headers))
  94.   {
  95.    echo '<p>'.$message_envoye.'   <a href="http://www.XXXXXXXXXXXXXX.fr/contact.php">Cliquez-ici pour revenir au formulaire</a></p>'."\n";
  96.   }
  97.   else
  98.   {
  99.    echo '<p>'.$message_non_envoye.'  <a href="http://www.XXXXXXXXXXXXXXX.fr">Retour au formulaire</a></p>'."\n";
  100.   };
  101.  }
  102.  else
  103.  {
  104.   // une des 3 variables (ou plus) est vide ...
  105.   echo '<p>'.$message_formulaire_invalide.' <a href="http://www.XXXXXXXXX.fr/contact.php">Retour au formulaire</a></p>'."\n";
  106.  };
  107. }; // fin du if (!isset($_POST['envoi']))
  108. ?>


 
 
Pourriez-vous m'aider s'il vous plait ?
Merci beaucoup.

Reply

Marsh Posté le 10-05-2009 à 20:32:30   

Reply

Marsh Posté le 10-05-2009 à 20:40:03    

Ouch le code :/

 

Où est défini $headers ?

 

Sinon, la réponse à ton pb c'est que tu envoies un mail en format texte (donc pas HTML) mais que pour une raison que toi seul connait, tu encodes tout avec htmlspecialchars() (dans Rec()), qui te transforme tes caractères "spéciaux" en entités HTML (&#089; &gt; etc)


Message édité par theredled le 10-05-2009 à 20:41:21

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 10-05-2009 à 20:50:26    

Citation :

Ouch le code :/
 
Où est défini $headers ?


 
Il est definit ici:
 

Code :
  1. // On va vérifier les variables et l'email ...  
  2. $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré  
  3. if (($nom != '') && ($email != '') && ($message != '') && ($telephone != '') && ($ville != '') && ($societe != ''))
  4. {
  5.   // les 4 variables sont remplies, on génère puis envoie le mail  
  6.   $headers = 'De: '.$nom.' <'.$email.'>' . "\r\n" . 'Téléphone: '.$telephone.'' . "\r\n" . 'Société: '.$societe.'' . "\r\n" . 'Message: '.$message.'' . "\r\n";


 

Citation :

Sinon, la réponse à ton pb c'est que tu envoies un mail en format texte (donc pas HTML) mais que pour une raison que toi seul connait, tu encodes tout avec htmlspecialchars() (dans Rec()), qui te transforme tes caractères "spéciaux" en entités HTML (&#089; &gt; etc)


 
Je dois faire quoi^pour corriger le problème ?  :sweat:  

Reply

Marsh Posté le 10-05-2009 à 20:57:52    

quaresma a écrit :

Citation :

Ouch le code :/

 

Où est défini $headers ?

 

Il est definit ici:

 
Code :
  1. // On va vérifier les variables et l'email ...
  2. $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
  3. if (($nom != '') && ($email != '') && ($message != '') && ($telephone != '') && ($ville != '') && ($societe != ''))
  4. {
  5.   // les 4 variables sont remplies, on génère puis envoie le mail
  6.   $headers = 'De: '.$nom.' <'.$email.'>' . "\r\n" . 'Téléphone: '.$telephone.'' . "\r\n" . 'Société: '.$societe.'' . "\r\n" . 'Message: '.$message.'' . "\r\n";



Ok au temps pour moi.

 
quaresma a écrit :

Je dois faire quoi^pour corriger le problème ?  :sweat:

Comprendre comment ton code marche déja...

 

Et si t'as vraiment la flemme, vire les lignes

Code :
  1. $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
  2. $text = nl2br($text);


Qui ne servent à rien dans ton cas (et vu que c'est commenté en anglais, j'imagine que c'est pas toi qui les a écrites...)


Message édité par theredled le 10-05-2009 à 20:58:41

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 10-05-2009 à 21:04:45    

Citation :

Et si t'as vraiment la flemme, vire les lignes

Code :
  1. $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
  2. $text = nl2br($text);


Qui ne servent à rien dans ton cas (et vu que c'est commenté en anglais, j'imagine que c'est pas toi qui les a écrites...)


 
Et en enlevant ces lignes mon problème sera résolu ?
 
En effet ce n'est pas moi qui l'ai ecrit... :sarcastic:  
 
Merci pour ta reponse

Reply

Marsh Posté le 10-05-2009 à 21:06:02    

quaresma a écrit :

Citation :

Et si t'as vraiment la flemme, vire les lignes

Code :
  1. $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
  2. $text = nl2br($text);


Qui ne servent à rien dans ton cas (et vu que c'est commenté en anglais, j'imagine que c'est pas toi qui les a écrites...)


 
Et en enlevant ces lignes mon problème sera résolu ?
 
En effet ce n'est pas moi qui l'ai ecrit... :sarcastic:  
 
Merci pour ta reponse


Ben écoute essaie.
Mais le vrai problème, qui lui ne sera pas résolu, c'est que tu ne comprends pas ce que tu codes...


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Sujets relatifs:

Leave a Replay

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