Bonjour à tous,

J'ai fait récemment le site d'un amis (xhtml/css et design) et j'ai tout simplement c/c son script de formulaire de contact qui fonctionnait très bien sur l'ancienne version. Depuis sur la nouvelle version lorsqu'il reçoit un mail il a des soucis de caractères, des accents qui n'y sont pas, des "points" manquant, l'arobase de l'adresse mail qui ne figure pas etc...

Serait-ce un pb de charset ? Ou du script ?

Je sèche un peu à vrai dire étant donné que le PHP n'est pas mon point fort.
Pour certains ça doit être un soucis bénin mais pour moi un vrai casse tête.

Je vous joint ci-dessous les codes correspondant.

Header.php, ou il y a le script en tête du document :


<!-- Script du formulaire d'envois de mail -->

<?php
// Couleur du texte des champs si erreur saisie utilisateur
$color_font_warn="#FF0000";
// Couleur de fond des champs si erreur saisie utilisateur
$color_form_warn="#FFCC66";
// Ne rien modifier ci-dessous si vous n’êtes pas certain de ce que vous faites !
if(isset($_POST['submit'])){
$erreur="";
// Nettoyage des entrées
while(list($var,$val)=each($_POST)){
if(!is_array($val)){
$$var=strip_tags($val);
}else{
while(list($arvar,$arval)=each($val)){
$$var[$arvar]=strip_tags($arval);
}
}
}
// Formatage des entrées
$f_1=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_1)));
$f_2=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_2)));
$f_3=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_3)));
$f_4=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_4)));
$f_5=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_5)));
$f_6=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_6)));
$f_7=trim(eregi_replace("[^0-9\ +]", "", $f_7));
$f_8=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_8)));
// Verification des champs
if(strlen($f_1)<2){
$erreur.="<li classe='erreur_mail'><span class='txterror'>* Le champ &laquo; Nom &raquo; est vide ou incomplet.</span>";
$errf_1=1;
}
if(strlen($f_9)<2){
$erreur.="<li classe='erreur_mail'><span class='txterror'>* Le champ &laquo; Message &raquo; est vide ou incomplet.</span>";
$errf_9=1;
}
if($erreur==""){
// Création du message
$titre="Message de votre site";
$tete="From:Site@Melting-k.fr\n";
$corps.="Nom : ".$f_1."\n";
$corps.="Prénom : ".$f_2."\n";
$corps.="Adresse : ".$f_3."\n";
$corps.="CP : ".$f_4."\n";
$corps.="Ville : ".$f_5."\n";
$corps.="Société : ".$f_6."\n";
$corps.="Tél. : ".$f_7."\n";
$corps.="E-mail : ".$f_8."\n";
$corps.="Message : ".$f_9."\n";
if(mail("fox_95100@hotmail.com", $titre, stripslashes($corps), $tete)){
$ok_mail="true";
}else{
$erreur.="<li><span class='txterror'>Une erreur est survenue lors de l'envoi du message, veuillez refaire une tentative.</span>";
}
}
}
?>

<!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" />
<title>Melting K, Agence conseil en communication – Toulouse, Cahors, Castres.</title>
<link rel="stylesheet" type="text/css" href="style.css"  />
<link rel="stylesheet" href="css/reset.css"  type="text/css" media="all" />


contact.php, ou y'a le formulaire de contact :


<?php include('header.php'); ?>


<div id="content_top"></div>

<div id="content">
	<div id="coordonnees">
    	
        <div align="center"><img class="nous_contacter" src="images/img_nous_contacter.jpg" alt="nous contacter" /></div>
        
        <div id="contact_agence">
        	<p><span class="bluestyle">L'agence :</span> 106 Avenue Tolosane, 31520 Ramonville St Agne<br />
				<span class="bluestyle">Siège Social :</span> 182 Ch. du Santou, 81580 SOUAL<br />
				<span class="bluestyle">Pôle commerciaux :</span> Castres / Cahors / Toulouse</p>
        </div>
                
        <img class="img_postit_contact" src="images/postit_contact.jpg" alt="postit contact"  />
    
    </div>
    
    <div id="formulaire_de_contact">
    
    <img class="img_formulaire" src="images/formulaire.jpg" alt="formulaire"  />
    
    <? if($ok_mail=="true"){ ?>
        <table width='100%' border='0' cellspacing='1' cellpadding='1'>
        <tr><td><span class='txtform'>Le message ci-dessous nous a bien été transmis, et nous vous en remercions.</span></td></tr>
        <tr><td>&nbsp;</td></tr>
        <tr><td><tt><?echo nl2br(stripslashes($corps));?></tt></td></tr>
        <tr><td>&nbsp;</td></tr>
        <tr><td><span class='txtform'>Nous allons y donner suite dans les meilleurs délais.<br>A bientôt.</span></td></tr>
        </table>
        <? }else{ ?>
        <form action='<? echo $PHP_SELF ?>' method='post' name='Form'>
        <table width='100%' border='0' cellspacing='1' cellpadding='1'>
        <? if($erreur){ ?><tr><td colspan='2' bgcolor='red'><span class='txterror'><font color='white'><b>&nbsp;ERREUR, votre message n'a pas été transmis</b></font></span></td></tr><tr><td colspan='2'><ul><?echo$erreur?></ul></td></tr><?}?>
        <tr><td colspan='2'><span class='txterror'>Les champs marqué d'une * sont obligatoires !</span></td></tr>
        <tr><td align='right' width='30%'><span class='txtform'>Nom<span class="rouge">*</span> :</span></td><td><input type='text' style='width:200 <?if($errf_1==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_1' value='<?echo stripslashes($f_1);?>' size='24' border='0'></td></tr>
        <tr><td align='right' width='30%'><span class='txtform'>Prénom :</span></td><td><input type='text' style='width:200 <?if($errf_2==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_2' value='<?echo stripslashes($f_2);?>' size='24' border='0'></td></tr>
        <tr><td align='right' width='30%'><span class='txtform'>Adresse :</span></td><td><input type='text' style='width:200 <?if($errf_3==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_3' value='<?echo stripslashes($f_3);?>' size='24' border='0'></td></tr>
        <tr><td align='right' width='30%'><span class='txtform'>CP :</span></td><td><input type='text' style='width:200 <?if($errf_4==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_4' value='<?echo stripslashes($f_4);?>' size='24' border='0'></td></tr>
        <tr><td align='right' width='30%'><span class='txtform'>Ville :</span></td><td><input type='text' style='width:200 <?if($errf_5==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_5' value='<?echo stripslashes($f_5);?>' size='24' border='0'></td></tr>
        <tr><td align='right' width='30%'><span class='txtform'>Société :</span></td><td><input type='text' style='width:200 <?if($errf_6==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_6' value='<?echo stripslashes($f_6);?>' size='24' border='0'></td></tr>
        <tr><td align='right' width='30%'><span class='txtform'>Tél. :</span></td><td><input type='text' style='width:200 <?if($errf_7==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_7' value='<?echo stripslashes($f_7);?>' size='24' border='0'></td></tr>
        <tr><td align='right' width='30%'><span class='txtform'>E-mail :</span></td><td><input type='text' style='width:200 <?if($errf_8==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_8' value='<?echo stripslashes($f_8);?>' size='24' border='0'></td></tr>
        <tr><td align='right' width='30%'><span class='txtform'>Message<span class="rouge">*</span> :</span></td><td><textarea style='width:360 <?if($errf_9==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name='f_9' rows='6' cols='40'><?echo$f_9?></textarea></td></tr>
        <tr><td align='right' width='30%'></td><td><input class="submit" type='submit' name='submit' value='Envoyer' border='0'></td></tr>
        </table>
        </form>
        <? } ?>
    </div>
    
    <div id="plan">
    	
       	<div align="center"><img class="nous_trouver" src="images/img_nous_trouver.jpg" alt="nous trouver"  /></div>
    	
    	<div align="center"><img class="plan" src="images/plan.jpg" alt="plan"  /></div>
	</div>

</div><!--fin bloc content-->

<div id="content_bottom"></div>

<?php include('footer.php') ?>


</body>
</html>


Si quelqu'un a une idée d'où cela pourrait venir, je le remercie par avance.
En attendant je continue mes recherches Smiley cligne
Si l'ancien site était en ISO (et non en UTF-8), il y a des chances que ce soit du à un problème d'encodage.

Le script utilise :
$f_1=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_1)));

Pour encoder les caractères spéciaux.

Personnellement j'utilise ceci :
htmlentities($f_1, ENT_NOQUOTES, "UTF-8")


Tu peux essayer de remplacer, en veillant à laisser la variable, ici $f_1
Salut Laurie-Anne Smiley smile

Merci pour ta réponse !

Alors j'ai remplacé chaque lignes par la tienne en gardant chaque variables.

Sous "hotmail" il me remplace les caractères spéciaux par des signes chinois mais sous gmail par exemple, c'est nickel !

Comment est-ce possible ? Smiley sweatdrop
Je dirais que hotmail décode le message en ISO et pas en UTF-8

La "solution" serait d'envoyer tes messages en HTML en précisant l'encodage du mail, mais bon ça devient compliqué du coup ^^;
Bah tu sais quoi ???

Et bah sous hotmail, un coup j'ai des signes chinois, un coup ça fonctionne nickel !!

J'pige plus... Smiley confus

Je vais envoyer la modif par mail à mon ami et si pour lui ça fonctionne nickel et ben c'est le principal.

On verra bien Smiley cligne
Bon et bien mauvaise nouvelle.

Chez moi ça fonctionne nickel et pas chez lui. C'est à n'y rien comprendre. Il utilise thunderbird comme messagerie.

Il a les "@", les "." mais encore des soucis avec les accents "é" "è" "à" etc...

Donc pour le moment il laisse comme ça il verra plus tard.

En tout cas merci pour ton intervention très utile Smiley cligne
Salut,

il faudrait effectivement préciser l'encodage dans les headers du mail : se reporter à la doc pour des exemples.
Modifié par Heyoan (23 Mar 2009 - 19:22)