Bonjour,

Le site de mon club propose un formulaire de contact.

Tout fonctionne très bien, cependant les courriels qui sont renvoyés suite à la soumission d'un message composé par ce formulaire comportent des balises html que j'aimerai ne pas voir apparaître. Voici un exemple de ce qui est renvoyé :

Bonjour<br />
Je recherche un planeur biplace M200.<br />
Etat indifférent mais complet et avec ces documents de vol.<br />
Sinon toutes pièces et éléments.<br />
Merci de passer l&#039;info à d&#039;autres clubs.<br />
Bons vols<br />


On peut voir les balises <br /> et les caractères spéciaux genre &#039;



Voici le code php du traitement du message saisi dans le formulaire :

[code=php]<fieldset>
                            <legend>Vos coordonnées</legend>
                                <p><label class="item_formulaire">Prénom : </label><br />
                                        <span class="reponse_formulaire"><?php echo htmlspecialchars($_POST['prenom']); ?> </span></p>
                                <p><label class="item_formulaire">NOM : </label><br />
                                        <span class="reponse_formulaire"><?php echo htmlspecialchars($_POST['nom']); ?> </span></p>
                                <p><label class="item_formulaire">Courriel : </label><br />
                                        <span class="reponse_formulaire"><?php echo htmlspecialchars($_POST['courriel']); ?> </span></p>
                                <p><label class="item_formulaire">Téléphone : </label><br />
                                        <span class="reponse_formulaire"><?php echo htmlspecialchars($_POST['tel']); ?> </span></p>
                    </fieldset>

                        <fieldset>
                                <legend>Vos souhaits</legend>
                                <p>
                                    <label class="item_formulaire">Informations optionnelles : </label><br />
                                    <span class="reponse_formulaire"><?php if (isset($_POST['vi'])) echo htmlspecialchars($_POST['vi']); ?> </span><br />
                                    <span class="reponse_formulaire"><?php if (isset($_POST['eleve'])) echo htmlspecialchars($_POST['eleve']); ?> </span><br />
                                    <span class="reponse_formulaire"><?php if (isset($_POST['pilote'])) echo htmlspecialchars($_POST['pilote']); ?> </span><br />
                                    <span class="reponse_formulaire"><?php if (isset($_POST['instructeur'])) echo htmlspecialchars($_POST['instructeur']); ?> </span><br />
                                    <span class="reponse_formulaire"><?php if (isset($_POST['stage'])) echo htmlspecialchars($_POST['stage']); ?> </span><br /><br />
                                </p>

                                <p>
                                    <label class="item_formulaire">Message : </label><br />
                                    <span class="reponse_formulaire"><?php echo nl2br(htmlspecialchars($_POST['message'])); ?> </span><br /><br />
                                    <span class="item_formulaire"><?php if (isset($_POST['copie'])) echo  htmlspecialchars($_POST['copie']); ?><br />
                                </p>
                        </fieldset>

                        <p><label class="item_formulaire">Date : </label><span class="reponse_formulaire"><?php echo (htmlspecialchars(date("Y-m-d H:i:s"))); ?> </span><br /><br /></p>

                            <?php

                            try /* EN CAS D'ERREUR */
                            {
                                $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                                $bdd = new PDO('mysql:host=sql.xxx;dbname=xxx', 'lsv_bdd', 'xxx', $pdo_options);
                               

                            // AJOUT DES ENTRÉES DANS LA TABLE formulaire
                            $req = $bdd->prepare('INSERT INTO formulaire (date_envoi, nom, prenom, courriel, tel, vi, eleve, pilote, instructeur, stage, message) VALUES( :date, :nom, [langue]renom, :courriel, :tel, :vi, :eleve, [langue]ilote, :instructeur, :stage, :message)');
                            $req->execute(array(
                                'date' => (htmlspecialchars(date("Y-m-d  H:i:s"))),
                                'nom' => htmlspecialchars($_POST['nom']),
                                'prenom' => htmlspecialchars($_POST['prenom']),
                                'courriel' => htmlspecialchars($_POST['courriel']),
                                'tel' => htmlspecialchars($_POST['tel']),
                                'vi' => (isset($_POST['vi'])),
                                'eleve' => (isset($_POST['eleve'])),
                                'pilote' => (isset($_POST['pilote'])),
                                'instructeur' => (isset($_POST['instructeur'])),
                                'stage' => (isset($_POST['stage'])),
                                'message' => htmlspecialchars($_POST['message'])
                                                            ));

                            $req->closeCursor(); // Important : on libère le curseur pour la prochaine requête
                            }

                            catch (Exception $e)
                            {
                                die('Erreur : ' . $e->getMessage());
                            }
                            ?>

                            <?php

                                // destinataire est mon adresse de courriel. Pour envoyer à plusieurs à la fois, il faut séparer les adresses par une virgule
                                $destinataire = 'xxx@xxx';

                                // copie ? (envoie une copie au visiteur)
                                $copie = (isset($_POST['copie'])) ? 'oui' : 'non'; // 'oui' ou 'non'

                                // Messages de confirmation du courriel
                                $message_envoye = "Votre message nous est bien parvenu !";
                                $message_non_envoye = "L'envoi du courriel a échoué, mais votre message nous est quand même bien parvenu.";

                                // Messages d'erreur du formulaire
                                $message_erreur_formulaire = "Vous devez d'abord <a href=\"formulaire_contact.php\">envoyer le formulaire</a>.";
                                $message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'adresse de courriel soit sans erreur.";

                                // on teste si le formulaire a été soumis
                                if (!isset($_POST['envoi']))
                                {
                                    // formulaire non envoyé
                                    echo '<fieldset><p class=nook>'.$message_erreur_formulaire.'</p></fieldset><br /><br />'."\n";
                                }
                                else
                                {
                                    /* cette fonction sert à nettoyer et enregistrer un texte */
                                    function Rec($text)
                                    {
                                        $text = trim($text); // delete white spaces after & before text
                                        if (1 === get_magic_quotes_gpc())
                                        {
                                                $stripslashes = create_function('$txt', 'return stripslashes($txt);');
                                        }
                                        else
                                        {
                                                $stripslashes = create_function('$txt', 'return $txt;');
                                        }

                                        // magic quotes ?
                                        $text = $stripslashes($text);
                                        $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
                                        $text = nl2br($text);
                                        return $text;
                                    };

                                    /* Cette fonction sert à vérifier la syntaxe d'un courriel */
                                    function IsEmail($courriel)
                                    {
                                        $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
                                        return (mb_eregi($pattern,$courriel)) ? true : false;
                                    };

                                    // formulaire envoyé, on récupère tous les champs.
                                    $prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
                                    $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
                                    $courriel = (isset($_POST['courriel'])) ? Rec($_POST['courriel']) : '';
                                    $tel = (isset($_POST['tel'])) ? Rec($_POST['tel']) : '';
                                    $vi = (isset($_POST['vi'])) ? Rec($_POST['vi']) : '';
                                    $eleve = (isset($_POST['eleve'])) ? Rec($_POST['eleve']) : '';
                                    $pilote = (isset($_POST['pilote'])) ? Rec($_POST['pilote']) : '';
                                    $instructeur = (isset($_POST['instructeur'])) ? Rec($_POST['instructeur']) : '';
                                    $stage = (isset($_POST['stage'])) ? Rec($_POST['stage']) : '';
                                    $message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';

                                    $informations = $prenom.' '.$nom."\n".$courriel."\n".$tel."\n\n".$vi."\n".$eleve."\n".$pilote."\n".$instructeur."\n".$stage."\n\n".$message;

                                    // On va vérifier les variables et le courriel ...
                                    $courriel = (IsEmail($courriel)) ? $courriel : ''; // soit le courriel est vide si erroné, soit il vaut le courriel entré

                                    if (($prenom != '') && ($nom != '') && ($message != ''))
                                    {
                                        // les 3 variables sont remplies, on génère puis envoie le courriel
                                        $headers = 'Formulaire LSV - De : '.$prenom.' '.$nom.'' . "\r\n";

                                    // envoyer une copie au visiteur ?
                                    if ($copie == 'oui')
                                    {
                                        $cible = $destinataire.','.$courriel;
                                    }
                                    else
                                    {
                                        $cible = $destinataire;
                                    };

                                    // Remplacement de certains caractères spéciaux
                                    $message = str_replace("&#039;","'",$message);
                                    $message = str_replace("&#8217;","'",$message);
                                    $message = str_replace("&quot;",'"',$message);
                                    $message = str_replace('<br>','',$message);
                                    $message = str_replace('<br />','',$message);
                                    $message = str_replace("&lt;","<",$message);
                                    $message = str_replace("&gt;",">",$message);
                                    $message = str_replace("&amp;","&",$message);

                                    // Envoi du courriel
                                    if (mail($cible, $headers, $informations))
                                    {
                                        echo '<fieldset><p class=ok>'.$message_envoye.'</p></fieldset><br /><br />'."\n";
                                    }
                                    else
                                    {
                                        echo '<fieldset><p class=erreur>'.$message_non_envoye.'</p></fieldset><br /><br />'."\n";
                                    };
                                    }
                                    else
                                    {
                                        // une des 3 variables (ou plus) est vide ...
                                        echo '<fieldset><p class=nook>'.$message_formulaire_invalide.' <br /><a href="formulaire_contact.php">Retour au formulaire > </a></p></fieldset><br /><br />'."\n";
                                    };
                                }; // fin du if (!isset($_POST['envoi']))
                            ?>
[/code]



Il y a pourtant une fonction de remplacement des caractères spéciaux ... mais cela ne fonctionne pas.

Merci d'avance pour votre aide.
Modifié par lool_lauris (17 Mar 2013 - 22:15)
Bonjour,

J'ai corrigé mon script :

1/ la ligne
$informations = $prenom.' '.$nom."\n".$courriel."\n".$tel."\n\n".$vi."\n".$eleve."\n".$pilote."\n".$instructeur."\n".$stage."\n\n".$message;
est devenue :
$informations = $prenom.' '.$nom."\n".$courriel."\n".$tel."\n\n".$vi."\n".$eleve."\n".$pilote."\n".$instructeur."\n".$stage;
(suppression de la donnée .$message )



2/ la ligne
if (mail($cible, $headers, $informations))
est devenue :
if (mail($cible, $headers, $informations, $message))


Maintenant les mails reçus sont propres.