Rechercher : dans
Par :

Retour à la ligne formulaire PHP mail

Dernière réponse le 19 jan 2009 à 14:22:25 Mysterious_fea, le 11 nov 2007 à 17:59:32 
 Signaler ce message aux modérateurs

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

Configuration: Windows Vista
Firefox 2.0.0.9

1

s.spark, le 11 nov 2007 à 22:21:48

Salut,

La fonction nl2br() est ton ami.

htmlspecialchars(nl2br($message))

Répondre à s.spark

2

Mysterious_fea, le 12 nov 2007 à 20:31:27
  • +2

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 !

Répondre à Mysterious_fea

3

s.spark, le 12 nov 2007 à 20:56:00

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>

Répondre à s.spark

4

Dalida, le 12 nov 2007 à 21:54:29

Salut,

les caractères HTML sont désactivés !
mais est-ce que tu envoies ton mail au format text ou au fotmat html ?

[ Mathieu ]

"Les jeunes c'est l'insécurité
il faudrait tous les enfermer!" BxN 1985

Répondre à Dalida

5

Mysterious_fea, le 13 nov 2007 à 18:41:15

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

Répondre à Mysterious_fea

6

s.spark, le 13 nov 2007 à 20:45:40

En même temps si tu met un htmlspecialchars c'est normal ;-)

Répondre à s.spark

7

Mysterious_fea, le 14 nov 2007 à 17:47:01

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 ?

Répondre à Mysterious_fea

8

s.spark, le 14 nov 2007 à 19:19:11

J'ai inversé c'est dans cette ordre là:

nl2br(htmlentities($message))

Répondre à s.spark

9

Mysterious_fea, le 14 nov 2007 à 20:56:32

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

Répondre à Mysterious_fea

10

s.spark, le 15 nov 2007 à 01:53:39

Rappel moi qu'elle est le problème ...

Répondre à s.spark

11

Mysterious_fea, le 15 nov 2007 à 22:00:19

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 ?

Répondre à Mysterious_fea

12

Mysterious_fea, le 17 nov 2007 à 21:59:12

Quelqu'un a une idée ?

Répondre à Mysterious_fea

13

s.spark, le 17 nov 2007 à 23:14: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 ?

Répondre à s.spark

14

s.spark, le 18 nov 2007 à 00:08:46

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))));

Répondre à s.spark

15

Mysterious_fea, le 18 nov 2007 à 10:59:23

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" ?

Répondre à Mysterious_fea

16

s.spark, le 18 nov 2007 à 13:44:34

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. ...

Répondre à s.spark

17

Mysterious_fea, le 20 nov 2007 à 16:07:04

OK merci @+

Répondre à Mysterious_fea

18

 Stéphane, le 19 jan 2009 à 14:22:25

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

Répondre à Stéphane
Collection CommentÇaMarche.net