Bonjour à tous,
C'est après plusieurs heures de recherche sur les différents forums et sites de programmation que je me décide à venir poster cette question ici. J'ai suivi le tutoriel "formulaire de contact", en ajoutant simplement un champ à celui-ci. Cela fonctionne, MAIS les dans les mails envoyés les "é" ou autres "è" sont remplacés par "é"
ou "è". Je crois avoir tout essayé, m'être assuré que le fichier était bien encodé en utf-8, pareil pour Filezilla, bref, je ne sais plus quoi faire ! Si quelqu'un par ici a suivi le même tuto et a la solution, ce serait une grande aide, je m'arrache les cheveux !
Merci !!

<?php
if(!empty($_POST)){
    extract($_POST);
    $valid = true;

        if($age != ""){
    }
    else{

    if(empty($nom)){
        $valid=false;
        $erreurnom="Vous n'avez pas indiqué votre nom";
    }
    if(empty($telephone)){
        $valid=false;
        $erreurtelephone="Vous n'avez pas indiqué votre numéro de téléphone";
    }
    if(!preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$email)){
        $valid=false;
        $erreuremail = "Votre adresse électronique n'est pas valide";
    }
    if(empty($email)){
        $valid=false;
        $erreuremail="Vous n'avez pas indiqué votre adresse électronique";
    }
    if(empty($texte)){
        $valid=false;
        $erreurtexte="Vous n'avez pas écrit de message";
    }
    if($valid){
        $to = "mon_adresse@fournisseur.com";
        $sujet = $nom." - contact via monsite";
        $header = "From: $nom <$email> \n";
        $texte = stripslashes($texte);
        $nom = stripslashes($nom);
        $message = "Prénom et nom : $nom. \n Numéro de téléphone : $telephone \n Adresse électronique : $email \n Message : $texte.";

        if (mail($to,$sujet,$message, $header)){
            $message_envoi = "Votre message a bien été envoyé, nous vous recontacterons dans les meilleurs délais";
            unset($nom);
            unset($email);
            unset($telephone);
            unset($texte);
        }
        else{
            $message_envoi = "Une erreur est survenue";
        }
    }
}
}
?>
<!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>Formulaire de contact</title>
<script type="text/javascript" language="javascript" src="jquery.js"></script>
<script type="text/javascript">
    $(function() {
        $("#age").hide();
        $("#envoyer").click(function(){
            valid=true;
            if ($("#nom").val()==""){
                $("#nom").css("border-color","#FF0000");
                $("#nom").next(".error-message").text("Merci d'entrer votre nom");
                valid=false;
            }
            else{
                $("#nom").css("border-color","#00FF00");
                $("#nom").next(".error-message").text("");
            }

            if ($("#telephone").val()==""){
                $("#telephone").css("border-color","#FF0000");
                $("#telephone").next(".error-message").text("Merci d'entrer votre numéro de téléphone");
                valid=false;
            }
            else{
                $("#telephone").css("border-color","#00FF00");
                $("#telephone").next(".error-message").text("");
            }

            if ($("#email").val()==""){
                $("#email").css("border-color","#FF0000");
                $("#email").next(".error-message").text("Merci d'entrer votre adresse électronique");
                valid=false;
            }
            else{
                if(!$("#email").val().match(/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i)){
                    $("#email").css("border-color","#FF0000");
                    $("#email").next(".error-message").text("Merci d'entrer une adresse électronique valide");
                }
                else{
                $("#email").css("border-color","#00FF00");
                $("#email").next(".error-message").text("");
                }
            }
            if ($("#texte").val()==""){
                $("#texte").css("border-color","#FF0000");
                $("#texte").next(".error-message").text("Merci d'entrer un message");
                valid=false;
            }
            else{
                $("#texte").css("border-color","#00FF00");
                $("#texte").next(".error-message").text("");
            }

            return valid;
        });
    });
</script>

<style type="text/css">
input{
    border:color #7A7A7A;
    width:200px;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
}
textarea{
    border:color #7A7A7A;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
    width:450px;
    height:150px;
}
input[type=submit]{
    background:#DDD;
    cursor:pointer;
}
input[type=submit]:hover{
    background:#FFF;
}
.error-message{
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
    color:#FF0000;
}
.texte{
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
}
</style>
</head>

<body>
<div id="contact">
  <hr/>
            <?php
                if (isset($message_envoi)){echo "<p>$message_envoi</p>";}
            ?>
            <form method="post" action="contact.php">
              <p>&nbsp;</p>
              <table width="100%" border="0" cellspacing="3">
                  <tr>
                    <td width="8%" valign="middle" nowrap="nowrap"><p class="texte">Nom et prénom :</p></td>
                    <td width="84%" valign="middle"><input type="text" name="nom" id="nom" value="<?php if(isset($nom)) echo $nom; ?>"/>
                    <span class="error-message"><?php if (isset($erreurnom)) echo $erreurnom; ?></span>
                    <input type="text" name="age" id="age"/>
                    </td>
                  </tr>
                  <tr>
                    <td valign="middle" nowrap="nowrap" class="texte">Numéro de téléphone :</td>
                    <td valign="middle"><input type="text" name="telephone" id="telephone" value="<?php if(isset($telephone)) echo $telephone; ?>"/>
                    <span class="error-message"><?php if (isset($erreurtelephone)) echo $erreurtelephone; ?></span>
                    </td>
                  </tr>
                  <tr>
                    <td valign="middle" nowrap="nowrap" class="texte">Adresse électronique :</td>
                    <td valign="middle"><input type="text" name="email" id="email" value="<?php if(isset($email)) echo $email; ?>"/>
                    <span class="error-message"><?php if (isset($erreuremail)) echo $erreuremail; ?></span>
                    </td>
                  </tr>
                  <tr>
                    <td height="152" valign="middle" nowrap="nowrap" class="texte">Message :</td>
                    <td valign="middle"><textarea name="texte" id="texte"><?php if(isset($texte)) echo $texte; ?></textarea>
                      <span class="error-message"><?php if (isset($erreurtexte)) echo $erreurtexte; ?></span></td>
                  </tr>
                </table>
                <p>
                  <input type="submit" value="Envoyer le formulaire" id="envoyer" />
                </p>
        </form>
    </div>
</body>
</html>

Note : assez bizarrement les accents s'affichent correctement dans le sujet du mail ?!

Merci :)

Renaud

3 réponses


JacobDelcroix
Réponse acceptée

Il te faut un header à ton mail afin de lui dire que le contenu est en utf-8

Renaud Méhier de Mathuisieulx
Auteur
Réponse acceptée

Merci beaucoup !!
Je ne sais pas si c'est très académique mais en tout cas ça fonctionne :

        $header = "Content-Type: text/plain; charset='UTF-8' From: $nom";

Enfin ça fonctionne sur Thunderbird. Quand je relève mes mails depuis mon mobile android ça me remplace les é par des ?, mais c'est un premier pas vers la victoire !!

Renaud

En plus propre et compatible avec android et autres (si jamais quelqu'un qui passerait par là en avait besoin) :

    if($valid){
        $to = "destinataire@fournisseur.com";
        $sujet = "contact via mon_site.fr";
        $header='Content-Type: text/html; charset="UTF-8"'."\n";
        $header.='Content-Transfer-Encoding: 8bit';
        $texte = stripslashes($texte);
        $nom = stripslashes($nom);
        $message = "Prénom et nom : $nom <br> Numéro de téléphone : $telephone <br> Adresse électronique : $email <br> Message : $texte";

        if (mail($to,$sujet,$message,$header)){
            $message_envoi = "Votre message a bien été envoyé, nous vous recontacterons dans les meilleurs délais";
            unset($nom);
            unset($email);
            unset($telephone);
            unset($texte);