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 :

Mes regex sur mon serveur n'aime pas les caractères accentués ! [Fait]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Mes regex sur mon serveur n'aime pas les caractères accentués !
    Bonjour,

    J'ai développé en local un formulaire d'ajout d'utilisateur dont les champs sont ensuite vérifiés par une regex. Tout fonctionne bien, mais lorsque je passe sur mon serveur, mes regex refusent les caractères accentués.

    Exemple d'un masque de regex : #^[[:alnum:] ,-]{1,255}$#

    Donc en local : ALNUM concerne tous les caractères alpanumérique, et comprends les caractères accentués.
    Mais sur serveur : ALNUM ne prend plus que les caractères alphanumérique. Ce qui fait, que des que je rentre un caractère accentué (ce qui est autorisé), mon script refuse de continuer.

    Ayant fait des recherches, je suis tombé la dessus :
    http://www.expreg.com/asavoir.php

    Le problème est clair, il concerne les locales du Serveur. Et moi, la locale demandé elle est bien validée sur mon serveur. lol Alors, là, je sais plus quoi faire !

    Est ce que quelqu'un à déjà eu ce cas ?

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 739
    Points
    11 739
    Par défaut
    tu fais un setlocale avec ta regex dans ton PHP ?

  3. #3
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    le setlocal en php dépend des locales qui sont réellement installées sur le serveur, ce n'est donc pas tres portable :/

    Une solution portable serait de modifier la regexp, ET la chaine traitée, afin de matcher les accents.

    L'idée est de transformer la chaine locale et de remplacer les accents par leur équivalent html (&eacute ou meme quelque chose du genre (&#xxxx
    Puis de modifier la regexp pour matcher aussi ces caracteres ci.

  4. #4
    mon_nom_est_personne
    Invité(e)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Bonsoir et merci pour vos réponses.

    Antoun : non je le fait pas car je voulait régler mon serveur au lieu de toucher à mon code ! C'est quand même fou, que le serveur ne soit pas configurer comme il faut des le début et que l'on soit obligé de rajouter cette ligne. Bref, je vais tenter comme même pour voir mais vraiment sa me dérange. lol

    Fladnag : c'est une bonne idée que j'utiliserai en dernier recours.

    mon_nom_est_personne (lol) : la fonction que tu m'a communiquer, si je comprends bien, permet de connaître l'encodage utilisé pour les regex ? De toute façon, je vais bien voir en testant.

    Cordialement.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Re,

    Alors mb_regex_encoding me donne : ISO-8859-1 ! Sa devrait donc accepter les accents non ?

    Enfin, "setlocale(LC_ALL,'fr-FR.ISO8859-1');" ne résout pas le problème. C'est un peu normal puisque j'ai déjà le bon encodage.

    Maintenant, la question est : comment est-ce que cela est possible ? J'avoue être perplexe sur ce coup ! Sa devrait fonctionner comme sur mon local.

    J'ai tenté d'isoler le code pour le tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    if(@$_GET['page'] =='2'){
        if(!preg_match('#^[[:alnum:] ,-]{1,255}$#',$_POST['adresse']))echo'NO Good';
        else echo'Good';
    }
    echo'<form method="POST" action="test.php?page=2">
    <input type="text" name="adresse"/>
    <input type="submit" value="Envoyer"/>
    </form>';
    ?>
    Je suis au même point !

    Merci.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je me permet de faire un petit up de mon message !

    C'est vraiment important que mes regex puisse accepter les accents.

    Petites informations :
    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
    dedie1879:~# locale
    LANG=fr_FR@euro
    LC_CTYPE="fr_FR@euro"
    LC_NUMERIC="fr_FR@euro"
    LC_TIME="fr_FR@euro"
    LC_COLLATE="fr_FR@euro"
    LC_MONETARY="fr_FR@euro"
    LC_MESSAGES="fr_FR@euro"
    LC_PAPER="fr_FR@euro"
    LC_NAME="fr_FR@euro"
    LC_ADDRESS="fr_FR@euro"
    LC_TELEPHONE="fr_FR@euro"
    LC_MEASUREMENT="fr_FR@euro"
    LC_IDENTIFICATION="fr_FR@euro"
    LC_ALL=
    Dans Apache :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddDefaultCharset latin9
    Pour information :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale(LC_ALL,'fr-FR.ISO8859-1');
    N'y change rien ! A sinon, lorsque j'utilise setlocale vide, il me retourne : "C" ! Il ne devrait pas me retourner l'encodage comme cela est spécifié dans la doc php ?

    Merci ! Je suis a bout... il n'y a aucune solution a mon problème.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je regarde du coté des locales de mon serveur et je commence à comprendre ! Voici un nouveau 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
    dedie1879:/# locale -a
    C
    eu_FR
    eu_FR@euro
    eu_FR.iso88591
    eu_FR.iso885915@euro
    eu_FR.utf8
    français
    french
    fr_FR
    fr_FR@euro
    fr_FR.iso88591
    fr_FR.iso885915@euro
    fr_FR.utf8
    POSIX
    La commande "locale -a" retourne les locales disponibles. Vous pouvez remarquer en première ligne, une locale appelé "C" et qui est celle apperament utilisée par PHP puisque que setlocale vide me la retourne !

    Ma question est donc, comment remplacer le "C" par "fr_FR@euro" ?

    Je vous avoue être avant tout programmeur... et non administrateur serveur. lol

    Merci.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Problème en partie résolu !
    Le code que j'avais trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale(LC_ALL,'fr-FR.ISO8859-1');
    était en faite incorrect ! Du moins pour ma configuration. C'est pour sa qu'il ne faisait rien. En faite, il fallait remplacer le tiret par un tiret bas ! Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale(LC_ALL,'fr_FR.ISO8859-1');
    Et à partir de ce moment là, miracle ! J'ai remarqué cela en relisant une énième fois les commentaires de la documentation PHP sur la fonction "setlocale".

    Donc, très bien, sa fonctionne. Mais j'aimerais bien maintenant ne pas avoir à mettre le setlocale... que pcre soit déja placé sur "fr_FR.ISO8859-1" et non "C".

    Avez vous une idées ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/03/2015, 19h47
  2. SOAP sur mon serveur ne marche pas
    Par Regis0122 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 16/02/2010, 10h24
  3. [PHP 5.2] mon serveur ne renvoie pas les erreurs pHp
    Par cipic dans le forum Langage
    Réponses: 4
    Dernier message: 25/04/2009, 20h07
  4. Mon appli n'aime pas les accents
    Par dd_garion dans le forum Bases de données
    Réponses: 14
    Dernier message: 05/09/2007, 10h23
  5. Réponses: 2
    Dernier message: 07/08/2007, 21h41

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