Accents et Charset dans formulaire PHP
lT4_
-
toto -
toto -
Bonjour,
J'ai vraiment besoin d'aide sur un soucis d'accents dans un formulaire de contact en PHP.
Je m'explique :
Je fais un site internet pour un ami, et dans la page de contact j'utilise un formulaire dans lequel je récupère des données comme le nom, la société, l'email et le message du visiteur.
J'utilise un charset utf-8 pour ma page, mais un ISO-8859-1 dans l'entête du message. Le soucis : je ne comprends vraiment pas pourquoi mes accents ne sont pas pris en compte et pourquoi je vois des \n \r au lieu de retours chariots...
De l'ordre général, quelles sont les fonctions (et dans quel ordre) et charset à adopter dans toutes les situations? J'aimerais avoir un code sur lequel je pourrais me baser pour mes prochains formulaires... Merci de votre aide !
Voici mon code :
J'ai vraiment besoin d'aide sur un soucis d'accents dans un formulaire de contact en PHP.
Je m'explique :
Je fais un site internet pour un ami, et dans la page de contact j'utilise un formulaire dans lequel je récupère des données comme le nom, la société, l'email et le message du visiteur.
J'utilise un charset utf-8 pour ma page, mais un ISO-8859-1 dans l'entête du message. Le soucis : je ne comprends vraiment pas pourquoi mes accents ne sont pas pris en compte et pourquoi je vois des \n \r au lieu de retours chariots...
De l'ordre général, quelles sont les fonctions (et dans quel ordre) et charset à adopter dans toutes les situations? J'aimerais avoir un code sur lequel je pourrais me baser pour mes prochains formulaires... Merci de votre aide !
Voici mon code :
<?php include_once("include/connexion_bdd.php"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" type="text/css" href="style.css" /> <link rel="icon" type="image/x-icon" href="images/favicon.ico" /> <title>Mon site - Contact</title> </head> <body> <div id="corps"> <?php $page = 6; include('include/header.php'); ?> <div id="corps_contenu"> <div id="bloc_formulaire"><br /> <center><h4>Formulaire de contact</h4></center> <?php // Inclusion de la fonction de vérification de mail. include("fonctions.php"); // Définition des variables dans le mail. $nom = utf8_decode(mysql_real_escape_string(htmlspecialchars($_POST['nom']))); if(isset($_POST['envoyer'])) { if(isset($_POST['societe'])) $societe = utf8_decode(mysql_real_escape_string(htmlspecialchars($_POST['societe']))); else $societe = "Inconnue"; } $email = utf8_decode(mysql_real_escape_string(htmlspecialchars($_POST['email']))); $objet = utf8_decode(mysql_real_escape_string(htmlspecialchars($_POST['objet']))); $message_envoi = nl2br(utf8_decode(mysql_real_escape_string(htmlspecialchars($_POST['message_envoi'])))); // Création des headers ! $headers ='From: "'.$nom.'"<'.$email.'>'."\n"; $headers .='Reply-To: '.$email.''."\n"; $headers .= 'Mime-Version: 1.0'."\r\n"; $headers .='Content-type: text/html; charset=ISO-8859-1'."\r\n"; $headers .= "\r\n"; // Vérification formulaire bien rempli ! if(isset($_POST['envoyer'])) { if( (empty($nom) || empty($email) || empty($objet) || empty($message_envoi))) $verif = 1; elseif(strlen($message_envoi) <= 20) $verif = 2; elseif (verif_mail($email) == false) $verif = 3; elseif ($_SERVER["HTTP_REFERER"] != "contact.php" || strstr($nom, "http://") || strstr($societe, "http://") || strstr($email, "http://") || strstr($objet, "http://") || strstr($message_envoi, "http://") ) $verif = 4; // Sécurité... elseif((!empty($nom) || !empty($email) || !empty($objet) || !empty($message_envoi))) $verif = 5; switch ($verif) { case 1 : $message_erreur = "<span class='msg_erreur'>Vous devez remplir tous les champs !</span>"; break; case 2 : $message_erreur = "<span class='msg_erreur'>Votre message doit faire au moins 20 caractères.</span>"; break; case 3 : $message_erreur = "<span class='msg_erreur'>Votre adresse mail est invalide !</span>"; break; case 4 : $message_erreur = "<span class='msg_erreur'>Par mesure de sécurité, l'envoi est impossible...</span>"; break; // Tout est correct, ENVOI DU MAIL !! case 5 : $message_final = "Monsieur ".$nom.", entreprise ".$societe.", vous a laissé un message :\n".$message_envoi; $succes_envoi = 1; if(mail('monmail', $objet, $message_final, $headers)) $message_erreur = "<br /><span class='msg_succes'>Votre message à bien été envoyé. Nous vous recontacterons dans les plus brefs délais.<br />L'équipe.</span>"; else $message_erreur = "<br /><span class='msg_erreur'>Erreur lors de l'envoi du mail. Veuillez réessayer ultérieurement.</span>"; break; } } ?> <form action="" method="post" name="formulaire_contact"> <?php if($succes_envoi == 1) echo $message_erreur.'<br /><br />'; else { ?> <?php if(isset($message_erreur)) echo $message_erreur.'<br /><br />'; ?> <br /><label for="nom">Votre nom :</label> <input type="text" name="nom" id="nom" maxlength="30" <?php echo "value='".$nom."'"; ?> /><br /> <label for="societe">Société (Facultatif) :</label> <input type="text" name="societe" id="societe" maxlength="30" <?php echo "value='".$societe."'"; ?> /><br /> <label for="email">Adresse Email :</label> <input type="text" name="email" id="email" maxlength="30" <?php echo "value='".$email."'"; ?> /><br /><br /> <label for="objet">Objet :</label> <input type="text" name="objet" id="objet" maxlength="30" <?php echo "value='".$objet."'"; ?> /><br /> <label for="message_envoi">Votre message :</label> <textarea name="message_envoi" id="message_envoi" rows="" cols="" ><?php echo $message_envoi; ?></textarea><br /><br /> <label for="submit">Valider :</label> <input type="submit" name="envoyer" value="Envoyer mon message" id="submit" /> <?php } ?> </form> </div> </div> <div id="right"> <h3>Contactez le groupe </h3> <p> <!-- Texte intro au formulaire de contact! --> <?php $req_contact = mysql_query("SELECT texte FROM contact LIMIT 0,1"); while($contact = mysql_fetch_array($req_contact) ) { echo nl2br($contact['texte']); } ?> </p> </div> <?php include("include/footer.php"); ?> </div> <!-- Corps--> <div class="space"></div> <!-- Correspond à l'espace de fin de page --> </body> </html>
A voir également:
- Accents et Charset dans formulaire PHP
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook - Guide
- Formulaire de reclamation instagram - Guide
- Easy php - Télécharger - Divers Web & Internet
- Confirmer le nouvel envoi du formulaire err_cache_miss - Forum Webmastering
4 réponses
il faut utiliser utf8_encode($_POST['xxx'] pour l'insertion dans la base MYSQL et utf8_decode($_POST['xxx'] dans le mail, ca marche très bien j'avais le même problème
Salut !
Essaye ptet d'utiliser utf8_encode() plutôt qu' utf8_decode, ça me parait plus logique. Enfin, je me trompe peut-être !
Cordialement,
IpIpIp Ipone
Essaye ptet d'utiliser utf8_encode() plutôt qu' utf8_decode, ça me parait plus logique. Enfin, je me trompe peut-être !
Cordialement,
IpIpIp Ipone
Bonjour IpIpIpIpOne,
Merci de ton aide, j'ai remplacé tous mes utf8_decode() par des utf8_encode(), mais je crois que c'est encore pire... :/
Voici le résultat obtenu, sur une seule ligne (Alors que j'ai tapé des entrées dans mon textarea...) :
Monsieur Toto, entreprise TotoCorp, vous a laissé un message : Petit test encore sur les accents :\r\n\r\nààééùù
Heeelp =(
Merci de ton aide, j'ai remplacé tous mes utf8_decode() par des utf8_encode(), mais je crois que c'est encore pire... :/
Voici le résultat obtenu, sur une seule ligne (Alors que j'ai tapé des entrées dans mon textarea...) :
Monsieur Toto, entreprise TotoCorp, vous a laissé un message : Petit test encore sur les accents :\r\n\r\nààééùù
Heeelp =(
Alors, petite nouveauté :
Je viens de mettre toute la page en ISO-8859-1, et j'ai viré toute fonction encode / decode en utf8.
J'obtiens un résultat plus propre, mais malheureusement j'obtiens toujours des \n \r dans mon mail...
Y'a t'il un rapport avec ma fonction htmlspecialchars? Ou bien ma fonction nl2br est t'elle mal placée?
Pour rappel :
$message_envoi = nl2br(mysql_real_escape_string(htmlspecialchars($_POST['message_envoi'])));
Et voici ce que j'obtiens :
Monsieur Toto2, entreprise TotoCorp, vous a laissé un message : Encore petit test :) :) :)\r\n\r\nééààùùè
Je viens de mettre toute la page en ISO-8859-1, et j'ai viré toute fonction encode / decode en utf8.
J'obtiens un résultat plus propre, mais malheureusement j'obtiens toujours des \n \r dans mon mail...
Y'a t'il un rapport avec ma fonction htmlspecialchars? Ou bien ma fonction nl2br est t'elle mal placée?
Pour rappel :
$message_envoi = nl2br(mysql_real_escape_string(htmlspecialchars($_POST['message_envoi'])));
Et voici ce que j'obtiens :
Monsieur Toto2, entreprise TotoCorp, vous a laissé un message : Encore petit test :) :) :)\r\n\r\nééààùùè
Re bonjour tout le monde,
Je pense avoir résolu mon problème, mais il laisse place à un nouveau problème... :/
Lors du traitement de mon message dans le textarea, j'ai supprimé le mysql_real_escape_string(), ce qui supprime mes \n et \r dans le mail reçu, et je peux donc voir mes retour à la ligne.
Voici la ligne de code qui traite mon message :
Maintenant, mon problème est le suivant : Comment sécuriser ma BDD tout en gardant mes retours chariot dans le message ?
Je pense avoir résolu mon problème, mais il laisse place à un nouveau problème... :/
Lors du traitement de mon message dans le textarea, j'ai supprimé le mysql_real_escape_string(), ce qui supprime mes \n et \r dans le mail reçu, et je peux donc voir mes retour à la ligne.
Voici la ligne de code qui traite mon message :
$message_envoi = utf8_decode(trim(nl2br(htmlspecialchars($_POST['message_envoi']))));
Maintenant, mon problème est le suivant : Comment sécuriser ma BDD tout en gardant mes retours chariot dans le message ?