Partage
  • Partager sur Facebook
  • Partager sur Twitter

encodage et mail

    20 février 2006 à 15:57:52

    bonjour tout le monde !

    bon j'ai un problème (aparemment d'encodage) avec mon script de contact par formulaire.

    En fait je reçoit bien mes mails mais toutes les caractères accentués sont mal traduits.
    Ma page contact.php est déclarée sous le charset charset=iso-8859-1, ce qui normalement ne devrait pas poser problème (non ?)...donc ou dois-je corriger mon script pour recevoir correctement mes mails (dans l'entête ? comment dois-je m'y prendre ?)

    merci encore :)

    mon script :

    <?php
    $email_webmaster = "contact@monsite.com";//// indiquer votre adresse email /////
    // === traitement des données du formulaire ============================================================
    if (isset($_POST["envoyer"])){
    // le formulaire a été soumis
            $etat = "erreur";
    // Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur
    // --- mise en forme des champs saisis dans le formulaire lors de sa soumission ---
            if (isset($_POST["email_expediteur"])) {
                     $_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"]));
            }
            if (isset($_POST["titre"])) {
                     $_POST["titre"]=trim(stripslashes($_POST["titre"]));
            }
            if (isset($_POST["message"])) {
                     $_POST["message"]=trim(stripslashes($_POST["message"]));
            }
                    if (isset($_POST["nom"])) {
                     $_POST["nom"]=trim(stripslashes($_POST["nom"]));
                    }
                    if (isset($_POST["prenom"])) {
                     $_POST["prenom"]=trim(stripslashes($_POST["prenom"]));
                    }
                    if (isset($_POST["telephone"])) {
                     $_POST["telephone"]=trim(stripslashes($_POST["telephone"]));
                    }
                    if (isset($_POST["pays"])) {
                     $_POST["pays"]=trim(stripslashes($_POST["pays"]));
                    }
            // --- test de la validité des champs saisis ---
            if (empty($_POST["email_expediteur"])) {
    // il manque l'email de l'expéditeur
                     $erreur="Saisissez votre adresse email...";
            }
            elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,3}$",$_POST["email_expediteur"])){
    // l'adresse e-mail n'est pas valide
                     $erreur="Votre adresse e-mail n'est pas valide...";
            }
                    elseif (empty($_POST["titre"])) {
    // le sujet est vide
                     $erreur="Saisissez votre sujet...";
            }
            elseif (empty($_POST["message"])) {
    // le message est vide
                     $erreur="Saisissez votre message...";
            }
                    elseif (empty($_POST["nom"])) {
    // le nom vide
                     $erreur="Saisissez votre nom...";
                    }
                    elseif (empty($_POST["prenom"])) {
    // le prenom est vide
                     $erreur="Saisissez votre prenom...";
                    }
            else {
    // --- tous les champs sont correctement remplis: on pourra envoyer le mail ---
                     $etat="ok";
            }
    }
    else {
    // --- le formulaire n'a pas été soumis ---
               $etat="attente";
    }
    // === fin de traitement des données du formulaire =======================================================
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
       <head>
           <title>Contact</title>
                       <link rel="shortcut icon" href="http://www.monsite.com/favicon.ico" />
                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
            <meta name="description" content="Contactez nous" />
          <link rel="stylesheet" media="screen" type="text/css" title="fispirit" href="accueil.css" />
    </head>
     <body>
       
     
       <p><img class="arrondis" src="image/arrondishaut.jpg" alt="arrondishaut" /></p>   
    <!-- conteneur -->

                   <div id="conteneur">
               
                 

    <!-- header -->

            <?php include('header.php');?>
                 
                 
               
             
         
         
     
    <!--  gauche -->

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

     
         
    <!-- Contact -->
                 
             <div id="presse">
                              <h1>CONTACT</h1>
                              <br />
                                <p><strong>Merci de remplir le formulaire suivant, nous vous répondrons dans les plus brefs délais.</strong>
                                    </p>
           
                                   
                      
                  <?php
    if ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur
             if ($etat=="erreur"){
    //le formulaire a été soumis avec une erreur
                             echo "<p class=\"erreur\"><strong>".$erreur."</strong></p>\n";
    // afficher le message d'erreur
             }
    ?>
            <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
              <fieldset>
                      <legend>Contact</legend>
                        <label>Nom*</label><br class="br" />
                 <input name="nom" type="text" class="textfield" value="<?php
            if (!empty($_POST["
    nom"])) {
    // le nom de l'expéditeur a été saisie: la réafficher
                    echo htmlspecialchars($_POST["
    nom"],ENT_QUOTES);
            }
            ?>"
    />
                <br />
                        <label>Prénom*</label><br class="br" />
                  <input name="prenom" type="text" class="textfield" value="<?php
            if (!empty($_POST["
    prenom"])) {
    // le prénom de l'expéditeur a été saisie: la réafficher
                    echo htmlspecialchars($_POST["
    prenom"],ENT_QUOTES);
            }
            ?>"
    />
                    <br />
                        <label>Société</label><br class="br" />
                  <input name="societe" type="text" class="textfield" value="<?php
            if (!empty($_POST["
    societe"])) {
    // l enom de la société de l'expéditeur a été saisie: la réafficher
                    echo htmlspecialchars($_POST["
    prenom"],ENT_QUOTES);
            }
            ?>"
    />
                <br />
                <label for="email_expediteur">e-mail*</label><br class="br" />
                <input name="email_expediteur" type="text" class="textfield" value="<?php
            if (!empty($_POST["
    email_expediteur"])) {
    // l'adresse email de l'expéditeur a été saisie: la réafficher
                    echo htmlspecialchars($_POST["
    email_expediteur"],ENT_QUOTES);
            }
            ?>"
    />
                <br />
                <label>Téléphone</label><br class="br" />
                <input name="telephone" type="text" class="textfield"value="<?php
            if (!empty($_POST["
    telephone"])) {
    // le telephone de l'expéditeur a été saisie: la réafficher
                    echo htmlspecialchars($_POST["
    telephone"],ENT_QUOTES);
            }
            ?>"
    />
                            <br />
                            <label>Pays*</label><br class="br" />
                            <select name="pays" class="textfield">
                   <optgroup label="Europe">
                       <option value="france" selected="selected">France</option>
                       <option value="espagne">Espagne</option>
                       <option value="italie">Italie</option>
                                       <option value="allemagne">Allemagne</option>
                       <option value="royaume-uni">Royaume-Uni</option>
                   </optgroup>
                               <optgroup label="Caraïbes">
                       <option value="saint-sartin">Saint-Martin</option>
                       <option value="saint-barth">Saint-Barth</option>
                       <option value="guadeloupe">Gouadeloupe</option>
                                       <option value="martinique">Martinique</option>
                       <option value="autres-iles">Autres îles</option>
                   </optgroup>
                   <optgroup label="Amérique">
                       <option value="canada">Canada</option>
                       <option value="quebec">Québec</option>
                       <option value="etats-unis">Etats-Unis</option>                             
                   </optgroup>
                               <optgroup label="Afrique">
                       <option value="afrique">Afrique</option>                     
                   </optgroup>
                   <optgroup label="Asie">
                       <option value="chine">Chine</option>
                       <option value="japon">Japon</option>
                                       <option value="inde">Inde</option>
                   </optgroup>
                               <optgroup label="Autres">
                       <option value="chine">Autre</option>
                                    </optgroup>
               </select>
                 
                            <br />
                            <br />
                <label for="titre">Sujet*</label><br class="br" />
                <input type="text" name="titre" class="textfield" value="<?php
            if (!empty($_POST["
    titre"])) {
    // le titre du message a été saisi: le réafficher
                    echo htmlspecialchars($_POST["
    titre"],ENT_QUOTES);
            }
            ?>"
    />
                <label for="message">Message*</label><br class="br" />
                <br />
                 <textarea cols="30" rows="15" name="message"><?php
            if (isset($_POST["message"])) {
    // le message a été saisi: le réafficher
                    echo htmlspecialchars($_POST["message"],ENT_QUOTES);
            }
            ?>
                </textarea>
            <br />
                                          <label>&nbsp;</label><br class="br" />
                            <input name="envoyer" type="submit" class="submit" value="envoyer" />
                                                    <br />
                     </fieldset>
    </form>
    <?php
    }
    else {
    // le formulaire a été soumis sans erreur, on envoie le mail
            $entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n";
            $entete .= "MIME-Version: 1.0";
            $message=htmlentities($_POST["message"]."\n".$_POST["telephone"]."\n".$_POST["nom"]."\n".$_POST["prenom"]."\n".$_POST["societe"]."\n".$_POST["pays"]);
            if (@mail($email_webmaster,$_POST["titre"],$message,$entete)){
    // mail envoyé
               echo "<p class=\"erreur\"><strong>Votre message a bien été envoyé. Nous vous répondrons dans les meilleur delais.</strong></p><br />\n";
            }
            else {
    // erreur lors de l'envoi du mail
                    echo "<p class=\"erreur\"><strong>Un problème s'est produit lors de l'envoi du message.</strong></p>\n";
                    echo "<a class=\"footer\" href=\"".$_SERVER["PHP_SELF"]."\"><strong>Réessayez...</strong></a>\n";
            }
    }
    ?>

      </div>   
                 







    <!-- Le pied de page -->

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

       
               </div>
       
        </body>
    </html>
    • Partager sur Facebook
    • Partager sur Twitter
      20 février 2006 à 16:09:58

      Que deviennent les accents?
      Est ce que "é" devient "&ecute;"?
      Si oui, remplace le htmlentities() par htmlspecialchars() :)
      • Partager sur Facebook
      • Partager sur Twitter
        20 février 2006 à 16:18:28

        bonjour savageman , oui c'est exactement ça !

        et en remplaçant htmlentities par htmlspecialchars, je ne risque pas de rencontrer de problème de sécurité ?

        • Partager sur Facebook
        • Partager sur Twitter
          20 février 2006 à 16:24:05

          Heu, bah çà dépend de si tu envoie ton mail en format texte ou HTML.
          Si tu envoies en format texte, il n'y a pas de souci à priori!
          Sinon, si tu fais
          $_POST["message"] = str_replace('<', '&lt;', $_POST["message"]);
          idem avec $_POST["telephone"]

          Tu ne devrais pas avoir de problème majeur de sécurité

          [edit]: je viens de vérifier et htmlspecialchars fait déjà la conversion "<" => "&lt;", donc c'est bon à priori :)
          • Partager sur Facebook
          • Partager sur Twitter
            20 février 2006 à 16:32:47

            ben en fait je suis pas sur mais à priori, je reçoit mes mail au format texte...puisque je n'ai pas précisé le format html dans mon entête...non ?

            Sinon en relisant le script, je viens de m'apercevoir que mon htmlentities est peut être de trop puisque quand je récupère les variables de mon formulaire je précise déja le htmlspecialchars :

            <label>Prénom*</label><br class="br" />
                          <input name="prenom" type="text" class="textfield" value="<?php
                    if (!empty($_POST["
            prenom"])) {
            // le prénom de l'expéditeur a été saisie: la réafficher
                            echo htmlspecialchars($_POST["
            prenom"],ENT_QUOTES);
                    }
                    ?>"
            />
            • Partager sur Facebook
            • Partager sur Twitter
              20 février 2006 à 17:28:23

              ok, merci à toi ! :-)

              ++
              • Partager sur Facebook
              • Partager sur Twitter

              encodage et mail

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown