Inserer UTF-8 dans un formulaire php

Résolu/Fermé
val - 18 févr. 2011 à 19:43
 Monsieur Raton - 17 août 2015 à 07:14
Bonjour,
J'ai créé un formulaire avec dreamweaver mais lorsque je recois les emails, il ne traduit pas la chaîne de caractére en UTF-8
Mon code php:
<?php

$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$adresse = $_POST["adresse"];
$postal = $_POST["postal"];
$ville = $_POST["ville"];
$domicile = $_POST["domicile"];
$mobile = $_POST["mobile"];
$email = $_POST['email'];
$message = $_POST['message'];
$type = $_POST["type"];
$escalier = $_POST["escalier"];
$matiere = $_POST["matiere"];
$escaliers = $_POST["escaliers"];
$palier = $_POST["palier"];
$emplacement = $_POST["emplacement"];
$age = $_POST["age"];
$nombre = $_POST["nombre"];

if(!empty($nom) && !empty($email)){

$protection = htmlentities($nom) && ($prenom) && ($email) && ($message);

if( mail('contact-devis@escaliers-style.fr','Contact Escaliers de Style: ' .$_POST["nom"]. ' (' .$_POST["email"]. ')',
''.$_POST[''].'Nom :'.$nom.'
'.$_POST[''].'Prénom :'.$prenom.'
'.$_POST[''].'Adresse :'.$adresse.'
'.$_POST['postal'].'
'.$_POST[''].'Ville  :'.$ville.'
'.$_POST[''].'Tél: Domicile :'.$domicile.'
'.$_POST[''].'Tél: Mobile :'.$mobile.'
'.$_POST[''].'Email :'.$email.'
'.$_POST[''].'Message :'.$message.'
'.$_POST["type"].'
'.$_POST["escalier"].'
'.$_POST[''].'Matière :'.$matiere.'
'.$_POST["escaliers"].'
'.$_POST["palier"].'
'.$_POST["emplacement"].'
'.$_POST[''].'Age escalier :'.$age.'
'.$_POST[''].'Nombre de marches :'.$nombre.''))
{
echo '<p></p>';
}
else
{
echo '<p><stong>ERREUR !</p></strong>';
}}
?>


On ne rigole pas, je l'ai créé et c'est une première pas simple .....
Je suppose que je vais faire rager les developpeurs mais...Ca marche :-) enfin presque

Merci d'avance pou votre aide


A voir également:

8 réponses

Bonjour à tous
Je reviens pour donner la solution pour encoder un formulaire en UTF-8
Car apparemment je ne suis pas al seule à avoir eu ce soucis sans pouvoir trouver une solution... Enfin presque.
J'ai donc reconstruit tout le code php de mon formulaire et pour une première de "finalisation" j'en suis plutôt fière :-)

<?php 
define('MAIL_DESTINATAIRE','mon adresse@domaine.fr'); 
define('MAIL_SUJET','Demande de renseignement(s)');

if(!empty($_POST)){
extract($_POST);
	$valid = true;
 if (empty($_POST['nom'])){
		$valid=false;
		$erreurnom="Vous n'avez pas rempli votre Nom";
	}
 if (empty($_POST['prenom'])){
		$valid=false;
		$erreurprenom="Vous n'avez pas rempli votre Prénom";
	}
 if (empty($_POST['adresse'])){
		$valid=false;
		$erreuradresse="Vous n'avez pas rempli votre Adresse";
	}	
 if (empty($_POST['postal'])){
		$valid=false;
		$erreurpostal="Vous n'avez pas rempli votre Code postal";
}	
if (empty($_POST['ville'])){
		$valid=false;
		$erreurville="Vous n'avez pas rempli votre Ville";
	}
 if (empty($_POST['email'])){
		$valid=false;
		$erreuremail="Vous n'avez pas rempli votre Email";
	}
	if(!preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$email)){
		$valid=false;
		$erreuremail="Votre Email n'est pas valide";
	}
	if(empty($email)){
		$valid=false;
		$erreuremail="Vous n'avez pas rempli votre Email";
	}
 if (empty($_POST['type'])){
		$valid=false;
		$erreurtype="Vous n'avez pas rempli le Type";
	}
 if (empty($_POST['palier'])){
		$valid=false;
		$erreurpalier="Vous n'avez pas rempli le champ Palier";
	}
 if (empty($_POST['escalier'])){
		$valid=false;
		$erreurescalier="Vous n'avez pas rempli l'Escalier actuel";
	}
 if (empty($_POST['escaliers'])){
		$valid=false;
		$erreurescaliers="Vous n'avez pas rempli le type d'Escalier";
	}	
 if (empty($_POST['emplacement'])){
		$valid=false;
		$erreuremplacement="Vous n'avez pas rempli l'Emplacement";
	}	
 if (empty($_POST['age'])){
		$valid=false;
		$erreurage="Vous n'avez pas rempli l'Age de votre escalier";
	}
 if (empty($_POST['nombre'])){
		$valid=false;
		$erreurnombre="Vous n'avez pas rempli le Nombre de marche";
	}
if($valid){
$mail_entete = "MIME-Version: 1.0\r\n";
$mail_entete .= "From: {$_POST['nom']} "
             ."<{$_POST['email']}>\r\n";
$mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
$mail_entete .= 'Content-Type: text/plain; charset="utf-8"';
$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";

// préparation du corps du mail
$mail_corps = "Nom : $nom\n";
$mail_corps .= "Prénom : $prenom\n";
$mail_corps .= "Adresse : $adresse, $postal $ville\n";
$mail_corps .= "Tél. Mobile : $mobile\n";
$mail_corps .= "Tél. Domicile : $domicile\n";
$mail_corps .= "Email : $email\n";
$mail_corps .= "Message : $message\n";
$mail_corps = "Type : $type\n";
$mail_corps .= "Palier : $palier\n";
$mail_corps .= "Escalier actuel : $escalier\n";
$mail_corps .= "Si autre matière : $matiere\n";
$mail_corps .= "Forme de l'escalier : $escaliers\n";
$mail_corps .= "Emplacement : $emplacement\n";
$mail_corps .= "Age de l'escalier : $age\n";
$mail_corps .= "Nombre de marche : $nombre\n";

// envoi du mail
if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {

  //Le mail est bien expédié - nettoyage des entrées
  $erreur = "Votre message nous a bien été transmis";
  		unset($nom);
		unset($prenom);
		unset($adresse);
		unset($postal);
		unset($ville);
		unset($mobile);
		unset($domicile);
		unset($email);
		unset($message);
		unset($matiere);
		unset($age);
		unset($nombre);
		}
		else{
			$erreur = "Une erreur est survenue, votre message n'est pas parti";
		}
	}	
}

?>


Voilà ! ca servira à beaucoup je pense...
3
En ajoutant une entête comme ça :

$header ='Content-Type: text/plain; charset="UTF-8"\r\n';
$header.='From: expediteur@escaliers-style.fr';


mail("destinataire@escaliers-style.fr","TitreDuMessage","Tonmessage",$header);

ça devrait aller
1
Merci pour la réponse, mais ca ne fonctionne pas et voici un exemple de message reçu:

Nom :
Prénom :
Adresse :

Ville :
Tél: Domicile :
Tél: Mobile :
Email :
Message : après blabla éèà @// 
Type: 
Escalier actuel: 
Matière :
Escalier: 
Palier: 
Emplacement: 
Age escalier :
Nombre de marches :


Dans l'exemple juste le champ message est rempli.
0
Il faut vérifier 2 choses :

1) Dans le header de ta page il doit y avoir :
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

2) La page qui contient ton formulaire doit être encodée en UTF-8
(à faire avec ton éditeur)

Un conseil : pour récupérer les valeurs $_POST utilises cette syntaxe
$msg=trim(nl2br(stripslashes($_POST['msg'])));
0

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

Posez votre question
oui mes pages sont en UTF-8

C'est à dire pour :
$msg=trim(nl2br(stripslashes($_POST['msg'])));
pour récupérer tous les champs non, prénom.......
Mais là il faut m'expliquer en reprenant mon code parce que comme tu l'as vu je suis encore au "NIVEAU" brut ! :-)
Je n'ai pas encore la finesse des "finitions"

Merci pur ton aide bestpostmaster
0
Profil bloqué
18 févr. 2011 à 21:06
le :

trim(nl2br(stripslashes($_POST['msg'])));

est à utiliser si t'as des textarea dans ton formulaire.
(C'est pas une obligation
exemple :

$message = trim(nl2br(stripslashes($_POST['message'])));

)

La définition des fonctions trim,nl2br, stripslashes est dispo sur google.

Avec ce que je t'ai dit ça doit marcher vérifie très bien.
En tout cas avec gmail ça affiche correctement
0
bon j'ai tout essayé, mais toujours rien. j'ai mis tout le site en

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">


Et là les emails sont intacts

Merci pour ton aide bestpostmaster.

Bonne soirée
0
Monsieur Raton
17 août 2015 à 07:14
Merci, je n'arrivais pas à m'en sortir avec l'UTF-8.
Du coup seul ma page avec le formulaire de contact est en ISO-8859-1 et du coup ça fonctionne !

Merci :)
0
Profil bloqué
18 févr. 2011 à 21:53
De rien. l' iso-8859-1 est très bien l'utf8 est meilleur.
Mais bon l'essentiel est que ça marche :))
0