Retour à la ligne formulaire PHP mail
Résolu
Mysterious_fea
Messages postés
401
Date d'inscription
Statut
Membre
Dernière intervention
-
Stéphane -
Stéphane -
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
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:
- Retour à la ligne formulaire PHP mail
- Whatsapp formulaire opposition - Guide
- Retour à la ligne excel formule - Guide
- Partager photos en ligne - Guide
- Formulaire de réclamation facebook - Guide
- Mail delivery system - Astuces et Solutions
17 réponses
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 !
Exemple ce code qui selon moi est inutile :
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 :
En bref t peux te limiter à ça :
$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))));
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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>
salut,
les caractères HTML sont désactivés !
mais est-ce que tu envoies ton mail au format text ou au fotmat html ?
les caractères HTML sont désactivés !
mais est-ce que tu envoies ton mail au format text ou au fotmat html ?
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
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
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 ?
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 ?
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é) :
$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 :
Voilà
Merci
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çu un mail envoyé pour les consultations en ligne.<br>Les champs contenant un tiret n'ont pas été remplis.<br>Vérifiez que les informations (nom et adresse e-mail) correspondent bien à celles indiquées sur le récapitulatif du paiement PayPal. Si c'est le cas, vous pouvez répondre au client en cliquant sur le bouton 'Ré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élé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('é', 'é',$message); $message=str_replace('è', 'è',$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
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 ?
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 ?
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 ?
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 ?
OK Super ça marche enfin ! Merci !
J'ai enlevé
et j'ai mis
Merci encore @+
Sinon : qu'est-ce qui va pa dans le nouveau code "bordelique" ?
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" ?
T'aurais pu créer la fonction
etc. ...
function replace($texte) { $texte=preg_replace('#(<|>)#', '-', $_POST['texte']); $texte=str_replace('"', "'",$texte); $texte=str_replace('&', 'et',$texte); return $texte; }
replace($nom); replace($adresse);
etc. ...
OK merci @+