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 :

Formulaire Contact avec caractères spéciaux impossible à résoudre.


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Formulaire Contact avec caractères spéciaux impossible à résoudre.
    Bonjour,

    J'essaie de créer un formulaire de contact avec php et ajax.
    Mais j'ai un problème avec les accents, cela fait qq heures que je usis dessus en ayant essayé pas mal de choses....(encodage UTF-8...)
    Soit ça me donne des "?" à la place des "é,à,è..." siot des �...
    Je vous donne mes codes :

    Fichier contacts.php :
    Code javascript : 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
    url = document.location.href;
    xend = url.lastIndexOf("/") + 1;
    var base_url = url.substring(0, xend);
    var ajax_get_error = false;
    function ajax_do (url) {
       if (url.substring(0, 4) != 'http') {
          url = base_url + url;
       }
       var jsel = document.createElement('SCRIPT');
       jsel.type = 'text/javascript';
       jsel.src = url;
       document.body.appendChild (jsel);
       return true;
    }
    function ajax_get (url, el) {
       if (typeof(el) == 'string') {
          el = document.getElementById(el);
       }
       if (el == null) { return false; }
       if (url.substring(0, 4) != 'http') {
          url = base_url + url;
       }
       getfile_url = base_url + 'getfile.php?url=' + escape(url) + '&el=' + escape(el.id);
       ajax_do (getfile_url);
       return true;
    }
    function submit_form() {
       // on set les variables
       var name = document.getElementById('name').value;
       var email = document.getElementById('email').value;
       var comment = document.getElementById('comment').value;
       //on envoie vers le fichier contact_forum-check.php
       url = 'contact.php?name=' + escape(name) + '&email=' + escape(email) + '&comment=' + escape(comment);
     
       // on renvoie les résultats dans le div id result
       ajax_get (url, 'result');
    }
    Code html : 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
    <div class="padding">
    	<div class="wrapper margin-bot">
    		<div class="col-3">
    			<div class="indent">
    				<h2 class="p0">Formulaire de contact</h2>
                                    <dl>
    <dt>Votre nom :</dt>
    <dd><input type="text" name="name" id="name" value="" size="60" /></dd><br>
     
    <dt>Votre email :</dt>
    <dd><input type="text" name="email" id="email" value="" size="60" /></dd><br>
     
    <dt>Votre message :</dt>
    <dd><textarea name="comment" id="comment" cols="70" rows="8" /></textarea></dd><br>
     
    <dd><input type="button" name="Envoyer" value=" Envoyer" onClick="submit_form();"><br />
    <div id="result">&nbsp;</div>
    </dd>
    </dl>

    Fichier contact.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
    <!--[if IE]>
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date du passé
    <![endif]-->
     
    <?php
     
    // date du jour
    $date = date("d M Y à H:i:s");
     
    // fonction verif format email
    function CheckEmail($email_auteur){
       $motif1  = "^[[:alnum:]]([[:alnum:]\._-]{0,})[[:alnum:]]";
       $motif1 .= "@";
       $motif1 .= "[[:alnum:]]([[:alnum:]\._-]{0,})[\.]{1}([[:alpha:]]{2,})$";
       $motif2 = "[\.]{2,}";
       return (ereg($motif1, $email_auteur) && !ereg($motif2, $email));
    }
     
     
    if (empty($_GET['name'])) { // SI PAS DE NOM
       die ("<br/><font style=\"color:#cc0000\"><img src='no.gif' alt='' /> Veuillez entrer votre nom...</font><br/>");
    }
     
    if (empty($_GET['email'])) { // SI PAS D'EMAIL
       die ("<br/><font style=\"color:#cc0000\"><img src='no.gif' alt='' /> Veuillez entrer votre email...</font><br/>");
    }
     
    if(preg_match('#^[\w.-]+@[\w.-]+\.[a-z]{2,6}$#i',($_GET['email'])&&($_GET['email']))){ // VERFIFE LE FORMAT DE l'EMAIL
       die ("<br/><font style=\"color:#cc0000\"><img src='no.gif' alt='' /> Le format de votre adresse e-mail n'est pas valide...</font><br/>");
    }
     
    if (empty($_GET['comment'])) { // SI PAS COMMENTAIRE
       die ("<br/><font style=\"color:#cc0000\"><img src='no.gif' alt='' /> Veuillez entrer votre message...</font><br/>");
    }
    // SI TOUT EST BON
     
       echo "<br><font style=\"color:#1A7917\"><img src='yes.gif' alt='' /> Votre email a été envoyé avec succès...<br>Nous prendrons contact avec vous dans les meilleurs délais.</font><br/>";
       $recipient = "info@xxx";
       $subject = "Formulaire de contact";
       $mailheaders = "From: <".$_GET['email']."> \r\n";
       $mailheaders .= "Reply-To: <".$_GET['email']."> \r\n";
       $mailheaders .= "Bcc: ".$adminemail2." \r\n";
       $mailheaders .= "Return-Path: <info@xxx> \n";
       $mailheaders .= "X-Sender: <info@xxx> \n";
       $mailheaders .= "X-Mailer: PHP \n";
       $mailheaders .= "X-Priority: 1 \n";
       $mailheaders .= "MIME-Version: 1.0 \n";
       $mailheaders .= "Content-Type: text/html; charset=utf-8 \r\n";
       $msg = "<br>\n";
       $msg = "Vous avez reçu un message du site C3D :<br><br>\r\n";
       $msg .= "$date | M ".stripslashes($_GET['name'])." <br>\r\n";
       $msg .= " <br>\n";
       $msg .= stripslashes($_GET['comment'])." <br>\n";   
       $msg .= "<br>\n";
       $msg .= "<br>\n";
       mail($recipient, $subject, $msg, $mailheaders) or die("Impossible d'envoyer le mail...");
    ?>
    Fichier get.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
       <?php
     
        // Get URL and div
        if (!isset($_GET['url'])) { die(); } else { $url = $_GET['url']; }
        if (!isset($_GET['el'])) { die(); } else { $el = $_GET['el']; }
        // Make sure url starts with http
        if (substr($url, 0, 4) != 'http') {
                // Set error
                echo 'alert(\'Security error; incorrect URL!\');';
                die();
        }
        // Try and get contents
        $data = @file_get_contents($url);
        if ($data === false) {
                // Set error
                echo 'alert(\'Unable to retrieve "' . $url . '"\');';
                die();
        }
        // Escape data
        $data = str_replace("'", "\'", $data);
        $data = str_replace('"', "'+String.fromCharCode(34)+'", $data);
        $data = str_replace ("\r\n", '\n', $data);
        $data = str_replace ("\r", '\n', $data);
        $data = str_replace ("\n", '\n', $data);
        ?>
        el = document.getElementById('<?php echo $el; ?>');
        el.innerHTML = '<?php echo $data; ?>';
    Merci pour votre aide.
    Bonne journée à vous.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    si tu as des caractères exotiques, c'est forcément un problème d'encodage à un moment donné.
    As-tu bien suivi ce tuto : Passez à l'UTF-8 sans manquer une étape ?
    Pense à vérifier l'encodage de la base de données également

    Ouvre tes fichiers un par un dans notepad++ et fais Encodage/Convertir en UTF-8 sans BOM
    Réessaie le formulaire.

    Si ça continue, il faudrait voir comment tu réponds à ta requête ajax.

    Est ce que les données reçues par le serveur contiennent aussi des caractères exotiques ?

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    C'est quoi ces commentaires conditionnels HTML qui englobent du code PHP ?

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    @Bovino

    Oui c'est étrange hein !! J'ai considéré ça comme du banal texte (mémo) vu qu'il n'y a même pas les tags <?php ... ?>.
    Mais bon plus j'y pense et plus je me dis que le codeuse n'a pas tout compris...

  5. #5
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci de ta réponse rawsrc.
    J'avais déjà essayer de suivre le tuto pour l'UTF-8 mais sans succés.
    Si des ? apparaissent, il est possible que ce soit un conflit de codage.
    J'ai donc essayer de mettre en haut demes pages php (comme indiquer dans le tuto)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header( 'content-type: text/html; charset=utf-8' );
    Et j'ai retirer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $mailheaders .= "Content-Type: text/html; charset=utf-8 \r\n";
    Le résultat :
    Vous avez reçu un message du site C3D :<br><br>
    23 Apr 2014 Ã 10:08:55 | M Berteaux <br>
    <br>
    éééààà <br>
    <br>
    <br>

    C'est soit l'un, soit l'autre.
    Je suis un peu déroutée....

    JE ne comprend pas vos commentaires après....

    Bonne journée.

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ce que le sieur Bovino et moi-même avons voulu te dire c'est que ce bout de code HTML
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <!--[if IE]>
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date du passé
    <![endif]-->
    est totalement inutile.

    Premièrement quel que soit le navigateur, les en-têtes ne sont pas spécifiques (à 99%), ensuite mettre du code php sans les tags comme ceci <?php header("Cache-Control: no-cache, must-revalidate"); ?> fera que cela ne sera interprété...

    Après va falloir que tu reprennes ton code pas à pas. Un conseil lors de la réponse ajax, n'envoie pas les en-têtes, envoie juste la réponse.

  7. #7
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci, je vais essayer de m'en sortir.
    J'avais déjà fait d'autres formulaires sans utiliser ajax, mais je vois ici que je ne maîtrise pas du tout mais c'est un peu plus "propre" je trouve.

    MErci à vous.

Discussions similaires

  1. [DOM] Erreur parser fichier xml avec caractère spéciaux
    Par turcotm dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 19/06/2006, 09h01
  2. [MySQL] Problèmes avec caractères spéciaux
    Par brokengillou dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 27/04/2006, 17h02
  3. recupérer GET avec caractères spéciaux
    Par masseur dans le forum Langage
    Réponses: 11
    Dernier message: 03/01/2006, 11h37
  4. [RegEx] chaîne de caractères avec caractères spéciaux
    Par Kerod dans le forum Langage
    Réponses: 9
    Dernier message: 25/12/2005, 01h40
  5. Réponses: 3
    Dernier message: 11/10/2004, 17h26

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