IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème avec les accents [PHP 5.6]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 92
    Points : 25
    Points
    25
    Par défaut Problème avec les accents
    Bonjour à tous,

    Je rencontre un problème avec un formulaire de contact en PHP intégré à un site. En effet, lorsque je reçois un mail venant de ce formulaire, les données renseignées par l'expéditeur ont des problèmes d'accents ! Ils sont tous remplacés par é

    A la création du site, je ne me souviens pas avoir eu ce problème, c'est sans doute dû à une mise à jour PHP du serveur qui est aujourd'hui en version 5.6. Mes fichiers PHP sont bien encodés en UTF-8.

    Voici le fichier formulaire.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <?php
     
    class Form
    {
        public function __construct() { }
     
        public function affiche_form() {
     
    	// Voici le div qui va afficher le résultat de l'envoi du message
    	?>
    	<div class="message"><div id="alert"></div></div>
    	<?php
    	// voici le formulaire de conctact
    	?>
    	<div>
    	    <div class="contact">
    			<form action="send.php" method="post" id="contactForm">
    				<ul>
    					<li>
    					<label for="name">Nom:</label>
    					<input type="text" name="name" value="" id="name" />
    					</li>
    					<li>
    					<label for="email">Mail:</label>
    					<input type="text" name="email" value="" id="email" />
    					</li>
    					<li>
    					<label for="tele">Téléphone:</label>
    					<input type="text" name="tele" value="" id="tele" />
    					</li>
    					<li class="special">
    					<label for="last">test honeypot</label>
    					<input type="text" name="last" value="" id="last" />
    					</li>
    					<li>
    					<label for="message">Message:</label>
    					<textarea rows="6" name="message"></textarea>
    					</li>
    					<li>
    					<input class="bouton" type="submit" value="Valider" />
    					</li>
    				</ul>
    			</form>
    	    </div>
    	</div>
    	<?php
        }
    }
    ?>
    et le fichier send.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    <?php
     
    // Adresse de réception des messages
    $sendto = 'contact@domaine.fr';
    // Sujet du message
    $subject = 'Nouveau mail du site';
    // Message Titre lors d'une erreur de saisie
    $errormessage = 'Merci de renseigner les informations suivantes';
    // Message lors d'un envoi réussi
    $thanks = "Merci pour votre message<br />Une réponse vous sera apportée dans les meilleurs délais.";
    // Message lors d'un message frauduleux (piège à Bot)
    $honeypot = "Message frauduleux.";
    // Messages lors de champs vides
    $emptyname =  'Votre Nom';
    $emptyemail = 'Votre adresse E-mail';
    $emptytele = 'Votre numero de téléphone';
    $emptymessage = 'Votre message';
    // Messages lors d'une erreur de saisie
    $alertname =  'Merci de bien renseigner votre Nom avec des caractères standard';
    $alertemail = 'Merci de renseigner votre adresse E-mail dans ce format: <i>nom@exemple.com</i>';
    $alerttele = 'Merci de bien renseigner votre Numero de telephone dans ce format: <i>01 23 45 67 89</i>';
    $alertmessage = "Votre message semble comporter des caracteres speciaux, qui sont courant dans les adresses Web, merci de verifier.";
     
    // --------------------------- Code a ne pas toucher ci-dessous, à moins de savoir ce que vous faites ---------------------------------
     
    // Variable contenant les messages d'alertes
    $alert = '';
    // Variable vérifiant si une erreur se produit lors de la vérification avant l'envoi du message
    // Elle passe a 1 si une erreur se produit
    $pass = 0;
     
    // Fonction qui vérifie si le numéro comporte bien 10 chiffres
    function validerNumero($tel) {
        //Retourne true s'il est valide, sinon false.
        return preg_match('`^0[1-9]([-. ]?[0-9]{2}){4}$`', $tel) ? true : false;
    }
     
     
    // Fonction de nettoyage des variables pour des raisons de sécurités
    function clean_var($variable) {
        $variable = strip_tags(stripslashes(trim(rtrim($variable))));
        return $variable;
    }
     
    // Piège à Bot
    if ( empty($_POST['last']) ) {
     
        // Vérification des variables
        // Le Nom
        if ( empty($_POST['name']) ) {
    	    $pass = 1;
    	    $alert .= "<li>" . $emptyname . "</li>";
        } elseif ( ereg( "[][{}()*+?.\\^$|]", $_POST['name'] ) ) {
    	    $pass = 1;
    	    $alert .= "<li>" . $alertname . "</li>";
        }
        // Le mail
        if ( empty($_POST['email']) ) {
    	    $pass = 1;
    	    $alert .= "<li>" . $emptyemail . "</li>";
        } elseif ( !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL ) ) {
    	    $pass = 1;
    	    $alert .= "<li>" . $alertemail . "</li>";
        }
        // Le téléphone
        if ( empty($_POST['tele']) ) {
    	    $pass = 1;
    	    $alert .= "<li>" . $emptytele . "</li>";
        } elseif (!validerNumero($_POST['tele'] ) ) {
    	    $pass = 1;
    	    $alert .= "<li>" . $alerttele . "</li>";
        }
        // Le message
        if ( empty($_POST['message']) ) {
    	    $pass = 1;
    	    $alert .= "<li>" . $emptymessage . "</li>";
        }
    	    // Si une erreur d'est produit, on affiche les messages adéquat
    	    if ( $pass==1 ) {
    		echo "<script>$(\".message\").hide(\"slow\").show(\"slow\"); </script>";
    		echo "<h1>" . $errormessage . "</h1><br />";
    		echo "<ul>";
    		echo $alert;
    		echo "</ul>";
    	    // Si aucune erreur ne se produit ($pass = 0), on envoi le message
    	    } else {
    		$message = "De: " . clean_var($_POST['name']) . "\n";
    		$message .= "Email: " . clean_var($_POST['email']) . "\n";
    		$message .= "Telephone: " . clean_var($_POST['tele']) . "\n";
    		$message .= "Message: \n\n" . clean_var($_POST['message']);
    		$header = 'From:'. clean_var($_POST['email']);
     
    		// Code d'envoi du mail
    		mail($sendto, $subject, $message, $header);
    		// javascript
    		echo "<script>$(\".message\").hide(\"slow\").show(\"slow\").animate({opacity: 1.0}, 4000).hide(\"slow\"); $(':input').clearForm() </script>";
    		echo "<b>" .$thanks. "</b>";
    		die();
    	    }
    // Ici on affiche le message d'erreur du piège a bot
    } else {
        echo "<script>$(\".message\").hide(\"slow\").show(\"slow\"); </script>";
        echo $honeypot;
    }
    ?>
    Voyez-vous du code à modifier pour que les accents du message s'affichent ?

    Merci à vous !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Spécifie l'encodage dans l'en-tête du mail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $header = 'From:'. clean_var($_POST['email']) . "\r\n";
    $header.= "Content-Type: text/plain;charset=utf-8\r\n";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 92
    Points : 25
    Points
    25
    Par défaut
    Ce qui donne ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $header = 'From:'. clean_var($_POST['email']) . "\r\n";
    $headers.= "Content-Type: text/plain;charset=utf-8\r\n";
    $message = "De: " . clean_var($_POST['name']) . "\n";
    $message .= "Email: " . clean_var($_POST['email']) . "\n";
    $message .= "Telephone: " . clean_var($_POST['tele']) . "\n";
    $message .= "Message: \n\n" . clean_var($_POST['message']);
    $header = 'From:'. clean_var($_POST['email']);
    Il y a 2 fois "$header = 'From:'. clean_var($_POST['email'])", faut que je supprime le dernier ?

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu supprimes le dernier et tu fais bien attention à utiliser $header partout (et pas un coup $header, un coup $headers)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 92
    Points : 25
    Points
    25
    Par défaut
    Merci ça fonctionne !

    J'en ai profité pour remplacer mes par Sujet résolu !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. XMLHTTP, problèmes avec les accents
    Par Berliozz dans le forum ASP
    Réponses: 4
    Dernier message: 21/06/2006, 11h32
  2. AJAX : Problème avec les accents...
    Par @drien dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/01/2006, 14h33
  3. Petit problème avec les accents circonflexes...
    Par Harvester dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 29/11/2005, 18h44
  4. [HTML][Encodage] Problèmes avec les accents...
    Par eraim dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 26/05/2004, 10h11
  5. [JDBC] Problème avec les accents
    Par seawolfm dans le forum Administration
    Réponses: 2
    Dernier message: 29/01/2004, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo