5569 sujets

Sémantique web et HTML

Bonjour,

J'ai créé un formulaire de contact HTML/PHP. Le formulaire fonctionne bien mais quand l'internaute saisit un texte dans le champ textarea avec des paragraphes, lors de la réception du message de l'internaute dans ma boite mail, tout le texte est formaté en une seule ligne sans paragraphe alors que l'internaute l'a saisi avec des paragraphes.

 <form action="/form.php" method="post" id="exactes-form" class="exactes-form contact" autocomplete="off" accept-charset="utf-8">
				<div>	
					<div class="exactes-lc i-name" id="i-name">
						<div class="nom">Nom<br><span><input id="name" type="text" name="name" value="<?php echo (isset($_SESSION['mailChamps']['name'])) ? $_SESSION['mailChamps']['name'] : '' ?>" size="40" maxlength="128" class="i-msg name" required></span></div>
					</div>
					<div class="exactes-lc i-mail" id="i-mail">
						<div class="e-mail">E-mail<br><span><input id="email" type="email" name="email" value="<?php echo (isset($_SESSION['mailChamps']['email'])) ? $_SESSION['mailChamps']['email'] : '' ?>" size="40" class="i-msg mel" required></span></div>
					</div>
					<div class="exactes-lc i-message" id="i-message">
						<div class="message">Message<br><span><textarea id="message" name="message" value="<?php echo (isset($_SESSION['mailChamps']['message'])) ? $_SESSION['mailChamps']['message'] : '' ?>" cols="40" rows="5" class="i-msg msg" required></textarea></span></div>
					</div>
					<div class="lc-action lc-sub" id="lc-sub"><div class="c-button"><input type="submit" id="lc-submit" name="op" value="Envoyer" class="i-msg button"></div></div>
				</div>
			</form>

Formulaire PHP de traitement des données
 <?php if ( 'POST' != $_SERVER['REQUEST_METHOD'] ) {
	header('Allow: POST');
	header('HTTP/1.1 405 Method Not Allowed');
	header('Content-Type: text/plain');
	exit;
}
session_start();
/**
 * [Sécurise les champs du formulaire qui ne doivent pas contenir de html]
 */
function mailCleanChamps($champ) {
	return htmlentities(trim(strip_tags(stripslashes($champ))), ENT_NOQUOTES, "utf-8");
}

/**
 * [Sécurise les champs de texte du formulaire susceptibles de contenir du html (textareas)]
 */
function mailCleanMessage($champ) {
	return strip_tags(htmlentities(trim(stripslashes($champ)), ENT_NOQUOTES, "utf-8"));
}

$Nom = isset($_POST['name']) ? mailCleanChamps($_POST['name']) : null;
$Email = isset($_POST['email']) ? mailCleanChamps($_POST['email']) : null;
$Message = isset($_POST['message']) ? mailCleanMessage($_POST['message']) : null;

$_SESSION['mailChamps'] = [
	'name' => $Nom,
	'email' => $Email,
	'message' => $Message
];

$retour = array();

// Si le champ nom est vide
if (empty($Nom)) :

	$retour = array(
		'error' => true,
		'title' => 'Champ manquant',
		'content' => 'Merci de renseigner le champ « Nom ».',
		'type' => 'alert'
	);

// Si le champ email est vide ou ne correspond pas à la syntaxe requise de type xxxx@xxxx.xxx
elseif (empty($Email) || !filter_var($Email, FILTER_VALIDATE_EMAIL)) :

	$retour = array(
		'error' => true,
		'title' => 'Champ manquant',
		'content' => 'Votre adresse e-mail n\'est pas complète.',
		'type' => 'alert'
	);
	
// Si le champ message est vide
elseif (empty($Message)) :

	$retour = array(
		'error' => true,
		'title' => 'Champ manquant',
		'content' => 'Merci de renseigner le champ « Message ».',
		'type' => 'alert'
	);

$fomulaireErreurs = array_filter($retour);
if (empty($fomulaireErreurs)) :

	$mailDestinataire  = 'hello@mail.com';

	$mailContenu = array();
	$mailContenu[] = 'Nom : '.$Nom.'<br />';
	$mailContenu[] = 'E-mail : '.$Email.'<br />';
	$mailContenu[] = '<br />Message : <br />'.$Message;
	$mailContenu = join($mailContenu);

	$mailObjet = 'Message de '.$Nom;

	$mailHeaders  = 'From: Admin<hello@email.org>'."\n";
	$mailHeaders .= 'Reply-To: '.$Email."\n";
	$mailHeaders .= 'MIME-Version: 1.0'."\n";
	$mailHeaders .= 'Content-type: text/html; charset="utf-8"'."\n";
	$mailHeaders .= 'Content-Transfer-Encoding: 8bit'."\n";

	// Envoi du mail
	if (mail($mailDestinataire, $mailObjet, $mailContenu, $mailHeaders)) :
		$retour = array(
			'title' => 'Envoi réussi',
			'content' => 'Merci '.$Nom.' ! Votre e-mail a été correctement envoyé !',
			'type' => 'success'
		);
		unset($_SESSION['mailChamps']);
	else :
		$retour = array(
			'title' => 'Erreur d\'envoi',
			'content' => 'Une erreur s\'est produite lors de l\'envoi de l\'e-mail. Merci de me signaler le problème via Twitter.',
			'type' => 'alert'
		);
	endif;
endif;

echo json_encode($retour);


Merci d'avance
Modifié par niuxe (08 Aug 2024 - 10:30)
niuxe a écrit :
Salut,

Pour faire simple : nl2br()
Pour quelque chose de plus élaboré : php markdown


Bonjour,

Merci pour votre réponse.
Donc je devrais utiliser nl2br() au lieu de htmlspecialchars(), c'est ça ?
niuxe a écrit :
Que fait nl2br ?


Le nl2br insère un <br/> à chaque nouvelle ligne.
Cela veut dire que je devrais ajouter $Message=nl2br($Message); en plus comme ça ? :

$Nom = isset($_POST['name']) ? mailCleanChamps($_POST['name']) : null;
$Email = isset($_POST['email']) ? mailCleanChamps($_POST['email']) : null;
$Message = isset($_POST['message']) ? mailCleanMessage($_POST['message']) : null;
$Message = nl2br($Message);


Merci encore