8796 sujets

Développement web côté serveur, CMS

bonjour,

sur mon site j'ai un formulaire qui permet au internautes de me contacter.
le formaulaire fonctionne bien, je recois bien les infos mais les accents ne passent pas j'ai des caracteres a la place.

ma page de validation du formulaire est : (voyez vous le code, je pense qu'il y a un bug car chez moi je le voi pas)


/* Email du destinataire*/
$destinataire = "monadresse@wanadoo.fr";

/* Récupération */
$nom = $_POST['Nom'];
$prenom = $_POST['Prénom'];
$adresse = $_POST['Adresse'];
$cp = $_POST['Code_postal'];
$ville = $_POST['Ville'];
$societe = $_POST['Société'];
$telephone = $_POST['Téléphone'];
$mobile = $_POST['Mobile'];
$email = $_POST['Email'];
$sujet = $_POST['Sujet'];
$message = $_POST['Message'];

	
$msg .= "Message de :\t$nom \t$prenom\n";  
$msg .= "Adresse :\t$adresse\n"; 
$msg .= "\t$cp \t$ville\n";  
$msg .= "Société :\t$societe\n"; 
$msg .= "Téléphone :\t$telephone\n";  
$msg .= "Mobile :\t$mobile\n"; 
$msg .= "Email :\t$email\n";  
$msg .= "Sujet :\t$sujet\n";  

$msg .= "Message :\t$message\n";
			
$header = "From: " . $_POST['email'];

/* Vérification */
if ( $nom == "" ) {
  echo "Veuillez indiquer votre nom.";
  $erreur = true;
}

/* Vérification validité mail */
$email_regex = "^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+.[a-z0-9-]";
if ( $email == "" OR !eregi( $email_regex , $email ) ) {
  echo "Veuillez indiquer un email valide. <br/>";
  $erreur = true;
}
if ( $telephone == "" ) {
  echo "Veuillez indiquer un numéro de téléphone. <br/>";
  $erreur = true;
}

if ( $message == "" ) {
  echo "Veuillez indiquer un message. <br/>";
  $erreur = true;
}



/* Envoi du mail */
if ( !$erreur ) {
  mail($destinataire, "Message du site internet" ,$msg, "From: $email\r\nReply-To: $email");

  echo " votre message a été envoyé.</br></br> 
  
    <fieldset>
    <legend>Votre message :</legend>
	Message de :\t$nom \t$prenom</br>  
	Adresse :\t$adresse</br> 
	\t$cp \t$ville</br>  
	Société :\t$societe</br> 
	Téléphone :\t$telephone</br>  
	Mobile :\t$mobile</br> 
	Email :\t$email</br>  
	Sujet :\t$sujet</br>  
	Message :\t$message</br></br>

Merci pour votre message, nous vous répondrons dans les plus brefs délais
  </fieldset>";
  
}


ma pages est en UTF8 et je pense que le problème viens de là mais je ne trouve pas comment résoudre le problème d'accents.

  


Modifié par Heyoan (02 Aug 2009 - 22:03)
fabrice88 a écrit :
voyez vous le code, je pense qu'il y a un bug car chez moi je le voi pas
Il y a un petit bug avec la coloration syntaxique. Dans ces cas là (message invisible ou incomplet) il faut remplacer [ code=php] par [ code] (sans espace).

Pour ta question : soit tu utilises utf8_decode sur tes variables pour les repasser en latin1, soit tu spécifies l'encodage utf8 dans les headers de la fonction mail.


Edit: à noter que FIELDSET et LEGEND n'ont rien à faire en dehors d'un formulaire.

Edit2: à priori ce qui pose parfois problème avec code=php est <?php et ?> qu'il faut alors supprimer.
Modifié par Heyoan (02 Aug 2009 - 22:05)
Bonjour,

A noter aussi, car j'ai eu le même cas dernièrement, que selon ton client messagerie, les accents sont ou pas bien pris en compte. Alors essaies aussi, si tu en as la possibilité, de réceptionner ton message dans d'autres messageries pour voir le résultat.
Si le problème vient du client messagerie, malheureusement on ne peut rien faire.

Moi par exemple, mon message malgré les bonnes indications Mime... ne fonctionnent pas avec Outlook 2007, mais très bien sur les versions précédentes ou autres mails type yahoo, gmail...
j'ai essayé de mettre utf8 dans l'header mais mes message arrivent tjs avec des problèmes d'accents.

voilà se que j'ai ajouté

$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
ah... je sent que je fais pas les choses correctement. Smiley murf

et bien c'est ni plus ni moins le code que j'ai mis ci dessus sauf que j'ai ajouté


$header .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$header .= "From: " . $_POST['email'];
Ben du coup il manque au moins
 $headers  = 'MIME-Version: 1.0' . "\r\n";
Et puisque tu ne l'as pas montré il faut donc supposer que tu n'as pas également oublié
mail($to, $subject, $message, [b][#blue]$headers[/#][/b]);
bon alors en ajoutant le header dans mail du coup je recois plus les messages.



  mail($destinataire, "message du site" ,$msg,$headers, "From: $email\r\nReply-To: $email");


et mon headers est :

$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= "From: " . $_POST['email'];

Ben... tu trouves vraiment que

  mail($destinataire, "message du site" ,$msg,$headers, "From: $email\r\nReply-To: $email");
ça ressemble à
mail($to, $subject, $message, [b][#blue]$headers[/#][/b]);
?
et bien sa y ressemble oui mais je dois me tromper.
j'ai supprimer le from et j'ai bien les accents dans mes message du coup mais comme maintenant j'ai :
  

mail($destinataire, "message du site" ,$msg,$headers);


je n'ai plus le mail de l'expediteur que je recuperai avec
From: $email\r\nReply-To: $email
Modifié par fabrice88 (01 Aug 2009 - 16:17)
c bon j'ai mis ça dans l'headers et sa fonctionne.

$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= "From: " .$email."\r\n";
$headers .= 'Reply-To: ' .$email."\r\n";


merci pour votre aide.