Formulaire mail, caractères inattendus dans le message

Résolu/Fermé
myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015 - 8 août 2014 à 10:35
myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015 - 8 août 2014 à 14:02
Bonjour à tous ^^

J'ai un formulaire de contact sur un fichier html + 1 script php sur un fichier à part.
Le tout fonctionne, je reçois bien les réponses dans ma boite mail...

... Mais, dans le corps du message, certains caractères apparaissent du genre :
"
et aussi les retours à la ligne sont notés <br />

Pourtant je n'ai pas de souci sur l'encodage des accents... Une idée pour épurer cela svp ?


Si ça peut vous aider voici mon code :
- le formulaire :
<form id="contact" method="post" action="traitement_formulaire.php">
  <p><i>Les champs marqués par </i><em>*</em> sont <em>obligatoires</em></p>
  <fieldset>
  <legend>      </legend>
  <table width="60%" border="0" cellspacing="1" cellpadding="1">
    <tr>
      <td width="20%">Nom <em>*</em></td>
      <td width="80%"><input name="nom" autofocus required="" id="nom" placeholder="Nom Prénom" size="50"></td>
    </tr>
    <tr>
      <td>Société</td>
      <td><input name="ste" id="ste" placeholder="Société" size="50"></td>
    </tr>
    <tr>
      <td>Téléphone</td>
      <td><input id="telephone" name="telephone" type="tel" placeholder="exemple: 01xxxxxxxx" ></td>
    </tr>
    <tr>
      <td>Email <em>*</em></td>
      <td><input name="email" type="email" required="" id="email" placeholder="prenom.nom@domaine.fr" size="50" ></td>
    </tr>
    <tr>
      <td>Adresse</td>
      <td><input name="adresse" type="text" id="adresse" placeholder="exemple : 10 rue de Rome" size="50" ></td>
    </tr>
    <tr>
      <td>Ville</td>
      <td><input name="ville" type="text" id="ville" size="50" ></td>
    </tr>
    <tr>
      <td><label for="cp">Code Postal</label></td>
      <td><input name="cp" type="text" id="cp" placeholder="xxxxx" size="15" ></td>
    </tr>
    <tr>
      <td>Pays</td>
      <td><select name="pays" id="pays">
        <option value="France" name="pays">France</option>
        <option value="Angleterre" name="pays">Angleterre</option>
        <option value="Belgique" name="pays">Belgique</option>
        <option value="Etats-Unis" name="pays">Etats-Unis</option>
        <option value="Suisse" name="pays">Suisse</option>
        <option value="Autre" name="pays">Autre</option>
      </select></td>
    </tr>
    <tr>
      <td>Si autre, précisez</td>
      <td><input name="autre_pays"type="text" id="autre_pays" size="50" ></td>
    </tr>
    <tr>
      <td>Votre message <em>*</em></td>
      <td><textarea name="comments" cols="50" rows="10"required id="comments"></textarea></td>
    </tr>
  </table>
 
  </fieldset>
 
      <fieldset>
          <legend>Recevoir notre newsletter :</legend>
    <label for="news_oui"><input id="oui" type="checkbox" name="news" value="oui" checked> Oui</label>
    <label for="news_non"><input id="non" type="checkbox" name="news" value="non"> Non</label>
    
  </fieldset>
  <br><input type="submit" name="envoi" value="Soumettre"></br>
</form>


et le traitement_formulaire.php :

<?php 

// print_r dans le php si tu veux voir ce qui est envoyé par ton formulaire
// print_r($_POST);

$destinataire = 'test@test.fr'; 
$objet = 'contact depuis le site web';
$copie = 'oui';

// Messages de confirmation du mail 
$message_envoye = "Votre message nous est bien parvenu." ;
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP."; 

// Messages d'erreur du formulaire 
$message_erreur_formulaire = "Vous devez d'abord envoyer le formulaire</a>."; 
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur."; 

// on teste si le formulaire a été soumis 
if (!isset($_POST['envoi']))
{ 
	// formulaire non envoyé 
	echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
} 
else 
{
	// formulaire envoyé, on récupère tous les champs. 
	$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : ''; 
	$ste = (isset($_POST['ste'])) ? Rec($_POST['ste']) : ''; 
	$telephone = (isset($_POST['telephone'])) ? Rec($_POST['telephone']) : ''; 
	$email = (isset($_POST['email'])) ? Rec($_POST['email']) : ''; 
	$adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : ''; 
	$ville = (isset($_POST['ville'])) ? Rec($_POST['ville']) : ''; 
	$cp = (isset($_POST['cp'])) ? Rec($_POST['cp']) : ''; 
	$pays = (isset($_POST['pays'])) ? Rec($_POST['pays']) : ''; 
	$autre_pays = (isset($_POST['autre_pays'])) ? Rec($_POST['autre_pays']) : ''; 
	$comments = (isset($_POST['comments'])) ? Rec($_POST['comments']) : ''; 
	$news = (isset($_POST['news'])) ? Rec($_POST['news']) : ''; 


	// On va vérifier les variables et l'email ... 
	$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré 

	if (($nom != '') && ($email != '') && ($comments != '')) 
	{ 
		// les 4 variables sont remplies, on génère puis envoie le mail 
		$headers = 'MIME-Version: 1.0' . "\r\n"; 
		$headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" . 
		'Reply-To:'.$email. "\r\n" . 
		'X-Mailer:PHP/'.phpversion(); 

		// envoyer une copie au visiteur ? 
		if ($copie == 'oui') 
		{ 
			$cible = $destinataire.','.$email; 
		} 
		else 
		{ 
			$cible = $destinataire; 
		}

 		// on crée le contenu du mail
		$contenuMail = '';
		$contenuMail .= 'Message de : ' . $nom . "\r\n";
		$contenuMail .= 'Société : ' . $ste . "\r\n";
		$contenuMail .= 'Adresse : ' . $adresse . "\r\n";
		$contenuMail .= 'code postal : ' . $cp . "\r\n";
		$contenuMail .= 'Ville : ' . $ville . "\r\n";
		$contenuMail .= 'Pays : ' . $pays . "\r\n";
		$contenuMail .= 'Pays : ' . $autre_pays . "\r\n";
		$contenuMail .= 'Téléphone : ' . $telephone . "\r\n";
		$contenuMail .= 'Email : ' . $email . "\r\n";
		$contenuMail .= 'Message : ' . $comments . "\r\n";
		$contenuMail .= 'Souhaite recevoir la newsletter : ' . $news . "\r\n";
		/* ... etc ... */

		// Envoi du mail 
		if (mail($cible, $objet, $contenuMail, $headers)) 
		{ 
			header('Location: page-remerciement.html');
			exit();
		} 
		else 
		{ 
			echo '<p>'.$message_non_envoye.'</p>'."\n"; 
		}

	} 
	else 
	{ 
		// une des 3 variables (ou plus) est vide ... 
		echo '<p>'.$message_formulaire_invalide.' <a href="contact.html">Retour au formulaire</a></p>'."\n"; 
	}
} // fin du if (!isset($_POST['envoi']))


/* 
* cette fonction sert à nettoyer et enregistrer un texte 
*/ 
function Rec($text) 
{ 
	$text = htmlspecialchars(trim($text), ENT_QUOTES);
	if (1 === get_magic_quotes_gpc()) 
	{ 
		$text = stripslashes($text); 
	} 

	$text = nl2br($text); 
	return $text; 
}

/* 
* Cette fonction sert à vérifier la syntaxe d'un email 
*/ 
function IsEmail($email) 
{ 
	$value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\'\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\'\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email); 
	return (($value === 0) || ($value === false)) ? false : true; 
} 


?>


A voir également:

4 réponses

myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015
8 août 2014 à 10:36
les " sont notés & quot ;
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 8/08/2014 à 11:55
Salut,

Le contenu de ton mail n'est pas envoyé au format html mais en texte (cf. header).

Tu n'as donc pas besoin d'utiliser htmlspecialchars pour échapper les caractères html ainsi que nl2br.

Modifie ta fonction Rec comme ceci :
/* 
* cette fonction sert à nettoyer et enregistrer un texte 
*/ 
function Rec($text) 
{ 
 if (1 === get_magic_quotes_gpc()) 
 { 
  $text = stripslashes($text); 
 } 

 return $text; 
}


Si tu veux faire l'inverse (envoyer ton mail au fomat html), laisse ta fonction Rec comme elle est et ajoute le content-type dans les entêtes :
http://php.net//manual/fr/function.mail.php#example-3495

Bonne journée
0
myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015
8 août 2014 à 12:10
Bonjour Pitet !!
Merci de m'aider une nouvelle fois :)
Je fais les essais cet aprem ou lundi et je te redis quoi ...
0
myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015
8 août 2014 à 14:02
re ^^

super tout fonctionne, au final je conserve l'envoi du mail au format texte.

Encore merci de ton aide !!
0