Les Allergies
Alimentaires
Posez votre question Signaler

Retour à la ligne formulaire PHP mail [Résolu]

Mysterious_fea 406Messages postés 29 juin 2007Date d'inscription 22 août 2011Dernière intervention - Dernière réponse le 19 janv. 2009 à 14:22
Bonjour,
Je sais que c'est question a souvent été posée mais bon...
Je veux retranscrire les retours à la ligne dans mon form php en envoi mail
J'ai essayé streplace de \r\n en <br> mais comme j'ai désactivé les htmlspecialchars, ça ne marche pas : dans le mail d'arrivée apparaît "Blabla& <br> Blabla <br> Guy" (sachant que j'ai mis les balises <html></html> pour coder mon message final.
J'ai aussi essayé le truc genre nb...($message) mais ça marche pas non plus
Que faire ?
Merci
Lire la suite 

Retour à la ligne formulaire PHP mail »

18 réponses
Réponse
+5
moins plus
J'ai inversé c'est dans cette ordre là:

nl2br(htmlentities($message))
Ajouter un commentaire
Réponse
+3
moins plus
Ben d'accord ça marche mais toujours les <br> s'affichent, et ne se traduisent pas en retours à la ligne, car les caractères HTML sont désactivés !
Ajouter un commentaire
Réponse
+2
moins plus
Rappel moi qu'elle est le problème ...
Ajouter un commentaire
Réponse
+2
moins plus
Exemple ce code qui selon moi est inutile :

    $nom=preg_replace('#(<|>)#', '-', $_POST['nom']);
    $nom=str_replace('"', "'",$nom);
    $nom=str_replace('&', 'et',$nom);


Le 1er remplace les chevrons par un tiré
Le 2ème remplace les double cote par un simple cote
Le 3ème remplace & par son entité html

Alors la fonction htmlspecialchars() ferait l'affaire :

http://fr.php.net/htmlspecialchars

Les remplacements effectués sont :

    * "&" (et commercial) devient "& amp;"(sans l'espace)
    * """ (guillemets doubles) devient "& quot;" (sans l'espace) lorsque ENT_NOQUOTES n'est pas utilisée.
    * "'" (single quote) devient "& #039;" (sans l'espace) uniquement lorsque ENT_QUOTES est utilisée.
    * "<" (inférieur à) devient "& lt;"(sans l'espace)
    * ">" (supérieur à) devient "& gt;"(sans l'espace) 


En bref t peux te limiter à ça :

 $message=trim(stripslashes(nl2br(htmlspecialchars($message))));
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

La fonction nl2br() est ton ami.

htmlspecialchars(nl2br($message))
Ajouter un commentaire
Réponse
+0
moins plus
On y peut rien si un maileur ne lit pas les balise html et si en plus de ça il n'affiche pas le text dans des balises <pre></pre>
Ajouter un commentaire
Réponse
+0
moins plus
salut,

les caractères HTML sont désactivés !
mais est-ce que tu envoies ton mail au format text ou au fotmat html ?
Ajouter un commentaire
Réponse
+0
moins plus
HTML bien sûr
Je reformate le message tapé avec une mise en forme, l'ajout de textes etc...
Ici, les balises HTML marchent, mais pas dans la récupération $message du textarea du message, car elles sont automatiquement désactivées (surement converties en >)
Merci
Ajouter un commentaire
Réponse
+0
moins plus
En même temps si tu met un htmlspecialchars c'est normal ;-)
Ajouter un commentaire
Réponse
+0
moins plus
Ben comment faire alors ?
C'est dangereux de laisser activé le HTML, non ?
Dans le forum de CCM il le font bien alors pourquoi ça marcherait pas chez moi ?
Ajouter un commentaire
Réponse
+0
moins plus
Quoi ?
Je met ça où ?
Pour plus de clarté, je te met la partie du code qui correspond à l'envoi du mail (j'ai utilisé le modèle du formulaire php de CCM que j'ai modifié) :
					$objet='.::Nouvelle question - Consultations en ligne::.';
					$headers='From:'.$votremail."\r\n".'To:'.$mail."\r\n".'Subject:'.$objet."\r\n".'Content-type:text/html;charset=fr-ascii\r\n'.'MIME-Version: 1.0\r\n'.'Sent:'.date('l, F d, Y H:i');
					$messagefinal="<html>Bonjour !<br>Vous avez re&ccedil;u un mail envoy&eacute; pour les consultations en ligne.<br>Les champs contenant un tiret n'ont pas &eacute;t&eacute; remplis.<br>V&eacute;rifiez que les informations (nom et adresse e-mail) correspondent bien &agrave; celles indiqu&eacute;es sur le r&eacute;capitulatif du paiement PayPal. Si c'est le cas, vous pouvez r&eacute;pondre au client en cliquant sur le bouton 'R&eacute;pondre'.<br><br>>><strong>Nom :</strong> $nom<br>>><strong>Adresse e-mail :</strong> $votremail<br>>><strong>Adresse postale :</strong> $adresse - $code $ville<br>>><strong>T&eacute;l&eacute;phone(s) :</strong> $tel - $tel2<br><br>>><strong>Question :</strong><br>$message</html>";
					if(mail($destinataire,$objet,$messagefinal,$headers))

$message récupère le contenu de la textarea message. Il est intégré au $messagefinal, qui est envoyé par mail.
les autres variables récupèrent le nom, le mail, l'adresse, ...
Une autre partie du code :
    $message=preg_replace('#(<|>)#', '-', $_POST['message']);
    $message=str_replace('"', "'",$message);
    $message=str_replace('&', 'et',$message);
    $message=str_replace('é', '&eacute;',$message);
    $message=str_replace('è', '&egrave;',$message);
	$message=str_replace("\n","<br>", $message);
    $nom=preg_replace('#(<|>)#', '-', $_POST['nom']);
    $nom=str_replace('"', "'",$nom);
    $nom=str_replace('&', 'et',$nom);
	$adresse=preg_replace('#(<|>)#', '-', $_POST['adresse']);
    $adresse=str_replace('"', "'",$adresse);
    $adresse=str_replace('&', 'et',$adresse);
	$ville=preg_replace('#(<|>)#', '-', $_POST['ville']);
    $ville=str_replace('"', "'",$ville);
    $ville=str_replace('&', 'et',$ville);

    // On assigne et/ou protège nos variables
    $votremail=stripslashes(htmlentities($_POST['votremail']));
    $message=stripslashes(htmlspecialchars($message));
    $nom=stripslashes(htmlspecialchars($nom));
	$adresse=stripslashes(htmlspecialchars($adresse));
	$code=stripslashes(htmlspecialchars($code));
	$ville=stripslashes(htmlspecialchars($ville));
	$tel=stripslashes(htmlspecialchars($tel));
	$tel2=stripslashes(htmlspecialchars($tel2));
    //input envoi
    $envoi=htmlentities($_POST['envoi']);
    //on enlève les espaces
    $votremail=trim($votremail);
    $message=trim($message);
	$nom=trim($nom);
	$adresse=trim($adresse);
	$code=trim($code);
	$ville=trim($ville);
	$tel=trim($tel);
	$pot=trim($pot);


Voilà
Merci
Ajouter un commentaire
Réponse
+0
moins plus
La fonction nl2br traduit bien les \r\n en <br>, mais ça compte comme si l'internaute avait tapé <br>. Or, l'insetion de balises html est désactivés par htmlspecialchars (j'ai gardé le modèle du formulaire foruni sur CCM dans les trucs & astuces)
Donc dans la mail envoyé apparaît :
"Première ligne <br> Deuxième ligne <br> Troisième ligne"
à la place de :
"Première
Deuxième
Troisième"

Sinon, peut être que je peux réactive rles caractères html ?
Ajouter un commentaire
Réponse
+0
moins plus
Quelqu'un a une idée ?
Ajouter un commentaire
Réponse
+0
moins plus
Est ce que tu as essayé de recevoir tes mails sur une autre messagerie ?

Sinon la nouvelle partie du code est bordélique, le code est redondant, il faut lire toute les lien une par une pour savoir ce qu'elle font, alors que l'utilisation de fonction serait beaucoup plus lisible.

De plus découvrir le code petit bout par petit ne peut pas nous mener bien loin, est-ce qu'il y a tout ?
Est-ce qu'il y a uniquement la variable $message qui pose problème ? Ou est-ce l'intégralité de $messagefinal ?
Ajouter un commentaire
Réponse
+0
moins plus
OK Super ça marche enfin ! Merci !
J'ai enlevé
$message=preg_replace('#(<|>)#', '-', $_POST['message']);

et j'ai mis
$message=trim(stripslashes(nl2br(htmlspecialchars($message))));

Merci encore @+
Sinon : qu'est-ce qui va pa dans le nouveau code "bordelique" ?
Ajouter un commentaire
Réponse
+0
moins plus
T'aurais pu créer la fonction

function replace($texte)
	{
		$texte=preg_replace('#(<|>)#', '-', $_POST['texte']);
		$texte=str_replace('"', "'",$texte);
		$texte=str_replace('&', 'et',$texte);
		return $texte;
	}


replace($nom);
replace($adresse);


etc. ...
Ajouter un commentaire
Réponse
+0
moins plus
OK merci @+
Stéphane - 19 janv. 2009 à 14:22
Sinon y'a un truc plus simple, pour les personnes qui comprennent pas la fonction,

vous créer une variable $message et dans celle ci vous mettez du code HTML

exemple :

$message = <html><head><title></title><body>xxxxxx<br /> xxxxx</body></html>

et le message sera bien mis en page ;)

A bientôt
Ajouter un commentaire
Ce document intitulé « Retour à la ligne formulaire PHP mail » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?