Retour à la ligne formulaire PHP mail

Résolu/Fermé
Mysterious_fea Messages postés 401 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 23 mars 2013 - 11 nov. 2007 à 17:59
 Stéphane - 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
A voir également:

17 réponses

s.spark Messages postés 2480 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 617
14 nov. 2007 à 19:19
J'ai inversé c'est dans cette ordre là:

nl2br(htmlentities($message))
5
Mysterious_fea Messages postés 401 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 23 mars 2013 35
12 nov. 2007 à 20:31
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 !
3
s.spark Messages postés 2480 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 617
15 nov. 2007 à 01:53
Rappel moi qu'elle est le problème ...
2
s.spark Messages postés 2480 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 617
18 nov. 2007 à 00:08
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 :

https://www.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))));
2

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
s.spark Messages postés 2480 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 617
11 nov. 2007 à 22:21
Salut,

La fonction nl2br() est ton ami.

htmlspecialchars(nl2br($message))
1
s.spark Messages postés 2480 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 617
12 nov. 2007 à 20:56
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>
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
12 nov. 2007 à 21:54
salut,

les caractères HTML sont désactivés !
mais est-ce que tu envoies ton mail au format text ou au fotmat html ?
0
Mysterious_fea Messages postés 401 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 23 mars 2013 35
13 nov. 2007 à 18:41
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
0
s.spark Messages postés 2480 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 617
13 nov. 2007 à 20:45
En même temps si tu met un htmlspecialchars c'est normal ;-)
0
Mysterious_fea Messages postés 401 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 23 mars 2013 35
14 nov. 2007 à 17:47
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 ?
0
Mysterious_fea Messages postés 401 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 23 mars 2013 35
14 nov. 2007 à 20:56
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
0
Mysterious_fea Messages postés 401 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 23 mars 2013 35
15 nov. 2007 à 22:00
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 ?
0
Mysterious_fea Messages postés 401 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 23 mars 2013 35
17 nov. 2007 à 21:59
Quelqu'un a une idée ?
0
s.spark Messages postés 2480 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 617
17 nov. 2007 à 23:14
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 ?
0
Mysterious_fea Messages postés 401 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 23 mars 2013 35
18 nov. 2007 à 10:59
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" ?
0
s.spark Messages postés 2480 Date d'inscription vendredi 29 octobre 2004 Statut Contributeur Dernière intervention 13 février 2018 617
18 nov. 2007 à 13:44
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. ...
0
Mysterious_fea Messages postés 401 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 23 mars 2013 35
20 nov. 2007 à 16:07
OK merci @+
0
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
0