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 :

Autoriser les caractères spéciaux


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Autoriser les caractères spéciaux
    Bonjour, j'utilise le forum car j'ai malheureusement des difficultés et donc j'en viens à demander votre aide.

    J'ai réalisé un formulaire de devis qui utilise donc des REGEX pour traiter les différents champs. Cependant j'ai fait quelques recherches mais il m'a tjs été impossible de réussir à modifier le code pour que ça marche (j'ai tenté pour le champs nom d'autoriser les ponctuations et les lettres avec accents mais sans réussite).

    En gros j'aurais aimé autoriser les accents et les ponctuations (telles que la virgule, l'apostrophe, le point) pour les champs ci-dessous et pour le champs commentaire qui se situe sur une autre page de devis (mon formulaire est en plusieurs étapes).
    J'ai lu que le souci pour autoriser ses caractères provenaient d'un "conflit" avec le htmlentities mais je ne sais pas par quoi, ni comment le remplacer.

    Pourriez-vous me donner un exemple pour le champs nom svp ? histoire que je comprenne comment modifier parce que je n'y suis pas parvenu.

    Ci-dessous le code :

    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
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    <?php
    //champ nom
    $_SESSION["nom"] = $_POST["nom"];
     
    //si le champs est rempli
    if (!empty($_SESSION["nom"]))
    {
    //on teste que la valeur soit correcte
    $_SESSION["nom"] = addslashes(trim(htmlentities($nom, ENT_QUOTES)));
     
    $verif="!^[a-zA-Z ]{2,40}$!";
    $search = 'çñÄÂÀÁäâàáËÊÈÉéèëêÏÎÌÍïîìíÖÔÒÓöôòóÜÛÙÚüûùúµ';
    $replace = 'cnaaaaaaaeeeeeeeeeiiiiiiiioooooooouuuuuuuuu';
    $_SESSION["nom"] = html_entity_decode($_SESSION["nom"]);
    $_SESSION["nom"] = strtr($_SESSION["nom"], $search, $replace);
    if(!preg_match($verif, $_SESSION["nom"]))
    {
    //si le champs n'obeit pas au REGEX, on alerte
    		echo "le nom que vous avez saisi contient des erreurs";
    		exit;
    }
    }
    else 
    {
    //si le champs est vide, on alerte
    		echo "Vous n'avez pas saisi votre nom";
    		exit;
    }
     
    //champ prénom
    $_SESSION["prenom"] = $_POST["prenom"];
     
    //si le champs est rempli
    if (!empty($_SESSION["prenom"]))
    {
    //on teste que la valeur soit correcte
    $_SESSION["prenom"] = addslashes(trim(htmlentities($prenom, ENT_QUOTES)));
     
    $verif="!^[a-zA-Z ]{2,40}$!";
    if(!preg_match($verif, $_SESSION["prenom"]))
    {
    //si le champs n'obeit pas au REGEX, on alerte
            echo "Le prenom que vous avez saisi contient des caracteres qui ne sont pas autorises (attention les accents sont interdits)";
    		exit;
    }
    }
    else 
    {
    //si le champs est vide, on alerte
    		echo "Vous n'avez pas saisi votre prenom";
    		exit;
    }
     
    //champ adresse
    $_SESSION["adresse"] = $_POST["adresse"];
     
    //si le champs est rempli
    if (!empty($_SESSION["adresse"]))
    {
    //on teste que la valeur soit correcte
    $_SESSION["adresse"] = addslashes(htmlentities($adresse, ENT_QUOTES));
     
    $verif="!^[a-zA-Z 0-9-\./ ]{5,50}$!";
    if(!preg_match($verif, $_SESSION["adresse"]))
    {
    //si le champs n'obeit pas au REGEX, on alerte
            echo "l'adresse que vous avez saisie n'est pas valide (attention l'adresse doit etre composee de 5 caracteres au minimum) !";
    		exit;
    }
    }
    else 
    {
    //si le champs est vide, on alerte
    		echo "Vous n'avez pas saisi votre adresse";
    		exit;
    }
     
     
    //champ ville
    $_SESSION["ville"] = $_POST["ville"];
     
    //si le champs est rempli
    if (!empty($_SESSION["ville"]))
    {
    //on teste qu'il soit correctement rempli
    $_SESSION["ville"] = addslashes(trim(htmlentities($ville, ENT_QUOTES)));
     
    $verif="!^[a-zA-Z-\./ ]{2,50}$!";
    if(!preg_match($verif, $_SESSION["ville"]))
    {
    //si le champs n'obeit pas au REGEX, on alerte
            echo "La ville que vous avez saisie est incorrecte (attention les accents sont interdits) !";
    		exit;
    }
    }
    else 
    {
    //si le champs est vide, on alerte
    		echo "Vous n'avez pas saisi votre ville";
    		exit;
    }
     
    //champ département
    $_SESSION["departement"] = $_POST["departement"];
     
    //si le champs est rempli
    if (!empty($_SESSION["departement"]))
    {
    //on teste qu'il soit correctement rempli
    $_SESSION["departement"] = addslashes(trim(htmlentities($departement, ENT_QUOTES)));
     
    $verif="!^[0-9]{2,5}$!";
    if(!preg_match($verif, $_SESSION["departement"]))
    {
    //si le champs n'obeit pas au REGEX, on alerte
            echo "Le numero de departement que vous avez saisi n'est pas valide ";
    		exit;
    }
    }
    else 
    {
    //si le champs est vide, on alerte
    		echo "Vous n'avez pas saisi votre numero de departement";
    		exit;
    }
     
    //champ email
    $_SESSION["email"] = $_POST["email"];
     
    //si le champs est rempli
    if (!empty($_SESSION["email"])) 
    {
    //on teste qu'il soit correctement rempli
    $_SESSION["email"] = addslashes(trim(htmlentities($email, ENT_QUOTES)));
     
    $verif="!^[a-zA-Z0-9\._\-]+@[a-zA-Z0-9\._\-]{2,}\.[a-zA-Z]{2,4}$!";
    if(!preg_match($verif, $_SESSION["email"]))
    {
    //si le champs n'obeit pas au REGEX, on alerte
            echo "Votre email n'est pas valide !";
    		exit;
    }
    }
    else 
    {
    //si le champs est vide, on alerte
    	echo "Vous n'avez pas saisi votre email";
    	exit;
    }
     
    //champ téléphone
    $_SESSION["tel"] = $_POST["tel"];
     
    //si le champs est rempli
    if (!empty($_SESSION["tel"]))
    {
    //on teste qu'il soit correctement rempli
    $_SESSION["tel"] = addslashes(trim(htmlentities($tel, ENT_QUOTES)));
     
    $verif="!^[0]{1}[0-9]{9}$!";
    if(!preg_match($verif, $_SESSION["tel"]))
    {
    //si le champs n'obeit pas au REGEX, on alerte
            echo "Le numero de telephone que vous avez saisi n'est pas valide !";
    		exit;
    }
    }
    else
    {
    //si le champs est vide, on alerte
    	echo "Vous n'avez pas saisi votre numero de telephone";
    	exit;
    }
     
    //champs commentaires
    $_SESSION["commentaires"] = $_POST["commentaires"];
     
    //si le champs est rempli
    if(!empty($_SESSION["commentaires"]))
    {
    	$_SESSION["commentaires"] = addslashes(htmlentities($commentaires, ENT_QUOTES));
     
    $verif="!^[a-zA-Z 0-9 \./]{1,200}$!";
    if(!preg_match($verif, $_SESSION["commentaires"]))
    {
    //si c'est pas alpha-numerique on alerte
            echo "Le commentaire que vous avez saisi est incorrect";
    		exit;
    }
    }
    ?>
    Merci par avance

  2. #2
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Alors je viens d'essayer un bout de code et j'arrive à autoriser les accents pour le nom MAIS le résultat à l'envoi du mail est catastrophique !!!

    Ci-dessous le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //si le champs est rempli
    if (!empty($_SESSION["nom"]))
    {
    //on teste que la valeur soit correcte
    $_SESSION["nom"] = addslashes(trim($nom, ENT_QUOTES));
     
    if(eregi("^[a-zA-Z_&; ]{2,}[a-zA-Z_&; ]$", $_SESSION["nom"]))
    {
    //si le champs n'obeit pas au REGEX, on alerte
    		echo "le nom que vous avez saisi contient des erreurs";
    		exit;
    }
    Est-ce que le code garde une sécurité suffisante vu que je n'utilise plus le htmlentities ?

    J'ai testé en envoyant le nom écoupé et dans le récapitulatif l'ortographe est correcte mais cependant l'orthographe dans le mail est déformé, j'obtiens quelque chose du genre :
    Demande de devis provenant de M./Mlle/Mme : écoupé
    et ensuite dans le nom j'obtiens :
    nom : C)coupC

    Comment puis-je faire en sorte que l'ortographe ne soit pas déformée ? Merci.

  3. #3
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Des nouvelles, j'essaye d'utiliser la fonction str_replace mais je n'arrive pas à remplacer les chaines de caracteres saisies, pourrais-je avoir des informations si possible ?

    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
    //si le champs est rempli
    if (!empty($_SESSION["nom"]))
    {
    //on teste que la valeur soit correcte
    $_SESSION["nom"] = addslashes(trim($nom, ENT_QUOTES));
     
    /*$verif="!^[a-zA-Z_&; ]{2,40}[a-zA-Z_&; ]$!";*/
    /*$search = 'çñÄÂÀÁäâàáËÊÈÉéèëêÏÎÌÍïîìíÖÔÒÓöôòóÜÛÙÚüûùúµ';*/
    $search = array("ç","ñ","Ä","Â","À","Á","ä","â","à","á","Ë","Ê","È","É","é","è","ë","ê","Ï","Î",",","Ì","Í","ï","î","ì","í","Ö","Ô","Ò","Ó","ö","ô","ò","ó","Ü","Û","Ù","Ú","ü","û","ù","ú","µ");
    $replace = array("c","n","a","e","i","o","u");
    $_SESSION["nom"] = str_replace($search, $replace, $_SESSION["nom"]);
     
    /*$_SESSION["nom"] = strtr($_SESSION["nom"], $search, $replace);
    if(!preg_match($verif, $_SESSION["nom"]))*/
     
    if(eregi("!^[a-zA-Z ]{2,40}$!", $_SESSION["nom"]))
    {
    //si le champs n'obeit pas au REGEX, on alerte
    		echo "le nom que vous avez saisi contient des erreurs";
    		exit;
    }
    }
    else 
    {
    //si le champs est vide, on alerte
    		echo "Vous n'avez pas saisi votre nom";
    		exit;
    }

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Citation de la doc PHP sur la fonction str_replace() :

    Si search et replace sont des tableaux, alors str_replace() prendra une valeur de chaque tableau, et l'utilisera pour faire le remplacement dans subject. Si replace a moins de valeurs que search, alors une chaîne vide sera utilisée pour effectuer les remplacements. Si search est un tableau et que replace est une chaîne, alors la chaîne de remplacement sera utilisée pour chaque élément de search. Cependant, l'inverse n'aurait aucun sens.
    Donc dans ton tableau, il faut que tu aies autant de valeur de remplacement que de valeurs à remplacer.

    En version simplifiée, je dirais que ça donnerai un truc dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    $nom = "hélène mälâstre"; //Toute ressemblance avec un nom existant serait fortuite;
     
    $nom = str_replace(array('é', 'è', 'ä', 'â'), array('e', 'e', 'a', 'a'), $nom);
     
    echo $nom;
    ?>
    Cela donne :

    helene malastre

    Il faut autant de 'e' dans le tableau de remplacement que de 'é', 'è', 'ê' etc.. dans le tableau des éléments à remplacer. Effectivement, PHP ne fait pas la correspondance (pas encore du moins ).

    A+

    Doug

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par draedalus
    J'ai réalisé un formulaire de devis qui utilise donc des REGEX pour traiter les différents champs. Cependant j'ai fait quelques recherches mais il m'a tjs été impossible de réussir à modifier le code pour que ça marche (j'ai tenté pour le champs nom d'autoriser les ponctuations et les lettres avec accents mais sans réussite).
    Cette expression (extension PCRE) serait simplement : ~^[[:alnum:][:punct:]]+$~D

    Ce test en revanche est faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if(!preg_match($verif, $_SESSION["nom"]))
    {
    //si le champs n'obeit pas au REGEX, on alerte
    		echo "le nom que vous avez saisi contient des erreurs";
    		exit;
    }
    }
    else 
    {
    //si le champs est vide, on alerte
    		echo "Vous n'avez pas saisi votre nom";
    		exit;
    }
    Le cas du champ vide non seulement est déjà traité par la condition : if (!empty($_SESSION["nom"])) mais la partie else de la condition ci-dessus indique qu'il y aura correspondance avec le motif. Le cas du champ vide correspondra, elle aussi, à la partie if.

    Il est inutile d'encoder pour décoder, strtr convient parfaitement pour transformer les caractères accentués en leur forme sans accent et je doute que trim apprécie ENT_QUOTES comme valeur pour son deuxième paramètre.

    En ce qui concerne :
    Demande de devis provenant de M./Mlle/Mme : écoupé
    Vous avez un problème d'encodage (UTF-8) quelque part le tout est de trouver où pour faire le nécessaire.

Discussions similaires

  1. [Applet][XML] Ne pas interpréter les caractères spéciaux
    Par leminipouce dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 28/07/2005, 17h15
  2. [SAX] Problème avec les caractères spéciaux
    Par abdou.sahraoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 18/07/2005, 11h07
  3. [C#][ADO] Enlever les caractère spéciaux
    Par Oberown dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/01/2005, 19h38
  4. [Jsp] Supprimer les caractère spéciaux d'une chaine
    Par PeteMitchell dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/05/2004, 12h11
  5. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 10h23

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