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 :

Accentués dans ma regex [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut Accentués dans ma regex
    Bonjour,

    J'ai une petite intérrogation. J'ai une regex simple mais qui me complique la vie.

    La regex est :
    preg_match("#\b(temps-là)\b#i", $ligne)


    $ligne = "F : [<sup>1</sup>non mais ils disent ils disent dans ce temps-là là / <P2,L10>";

    Je recherche "temps-là" dans ma ligne et ma regex ne la trouve rien.
    Si je cherche "disent", c'est correct.
    Si je cherche "temps", rien n'est trouvé.
    Si je cherche "là", je n'ai rien.
    Si je cherche "mais ils disent", c'est ok.

    Avez-vous une idée de mon problème ?

    Merci !

  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
    essai avec le modificateur "u" pour la prise en charge d'UTF8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match("#\b(temps-là)\b#ui", $ligne)
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    mon_nom_est_personne
    Invité(e)
    Par défaut
    ou tu peus essayer avec le code hexadecimal \x..
    cf. http://www.pjb.com.au/comp/diacritics.html

    dans ton cas: \xE0

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Ça ne fonctionne toujours pas. C'est réellement les "accents" qui me cause problème.

    Je vais détailler mon cas, car ça pourrait peut-être vous aider.

    C'est une recherche où les utilisateurs peuvent entrer jusqu'à 5 mots clés. Dans mon exemple, la ligne réelle est :

    preg_match("#\b($frm_keywords)\b#i", $ligne) où $frm_keywords est la variable contenant les mots séparés par des "|". Le champ de ma table ($ligne) est en latin1_swedish_ci sur mysql.

    C'est bizarre car je recherche les mots "là-bas" dans une phrase et je la trouve.

    Merci de votre aide...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par bobino75 Voir le message
    Je recherche "temps-là" dans ma ligne et ma regex ne la trouve rien. !
    Citation Envoyé par bobino75 Voir le message
    C'est bizarre car je recherche les mots "là-bas" dans une phrase et je la trouve.
    Exemples typiques d'une locale incorrecte.

    Qu'affiche le code suivant sur ton serveur?
    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
    <pre>
    <?php
     
    $ligne = "F : [<sup>1</sup>non mais ils disent ils disent dans ce temps-là là / <P2,L10>";
    $regex = '#\b(temps-là)\b#i';
     
    echo setlocale(LC_CTYPE, null), PHP_EOL;
    preg_match($regex, $ligne, $capture);
    print_r($capture);
     
    echo setlocale(LC_CTYPE, 'fr_FR.ISO-8859-1'), PHP_EOL;
    preg_match($regex, $ligne, $capture);
    print_r($capture);
     
    ?>
    </pre>

  6. #6
    mon_nom_est_personne
    Invité(e)
    Par défaut
    et utiliser mb_ereg ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par Tisha Carpenter Voir le message
    Exemples typiques d'une locale incorrecte.

    Qu'affiche le code suivant sur ton serveur?
    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
    <pre>
    <?php
     
    $ligne = "F : [<sup>1</sup>non mais ils disent ils disent dans ce temps-là là / <P2,L10>";
    $regex = '#\b(temps-là)\b#i';
     
    echo setlocale(LC_CTYPE, null), PHP_EOL;
    preg_match($regex, $ligne, $capture);
    print_r($capture);
     
    echo setlocale(LC_CTYPE, 'fr_FR.ISO-8859-1'), PHP_EOL;
    preg_match($regex, $ligne, $capture);
    print_r(($capture);
     
    ?>
    </pre>

    Voici ce que ça donne :

    CPHP_EOLArray
    (
    )
    fr_FR.ISO-8859-1PHP_EOLArray
    (
    [0] => temps-là
    [1] => temps-là
    )

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par mon_nom_est_personne Voir le message
    et utiliser mb_ereg ?
    La recherche ne semble plus fonctionner. J'ai aucun résultat et ce n'est pas normal.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par bobino75 Voir le message
    CPHP_EOLArray
    (
    )
    fr_FR.ISO-8859-1PHP_EOLArray
    (
    [0] => temps-là
    [1] => temps-là
    )
    Tu n'as pas vu que le second preg_match avait fonctionné ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
     
    $ligne = "F : [<sup>1</sup>non mais ils disent ils disent dans ce TEMPS-LÀ là / <P2,L10>";
     
    setlocale(LC_CTYPE, 'fr_FR.ISO-8859-1');
    if (preg_match('#\b(temps-là)\b#i', $ligne)) {
      echo 'preg_match fonctionne !!!';
    }
     
    ?>
    setlocale permet de changer la locale du système (si la locale voulue est disponible) lorsque la locale par défaut est n'est pas adaptée au besoin. Dans ton cas, US-ASCII ne connait pas les accents alors que tu travailles en ISO-8859-1 avec des accents. Mais ton serveur sait parler ISO-8859-1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale(LC_CTYPE, 'fr_FR.ISO-8859-1');
    Citation Envoyé par bobino75 Voir le message
    La recherche ne semble plus fonctionner. J'ai aucun résultat et ce n'est pas normal.
    Faudrait connaitre la version de PHP, car un PHP qui ne reconnait pas PHP_EOL est suspect à mes yeux. Normalement, mbstring sait reconnaitre \b comme la plupart des assertions, mais le charset par défaut peut aussi être un ennui qu'il faut préalablement ajuster avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mb_internal_encoding('ISO-8859-1');
    Mon principale reproche avec mbstring est qu'il est lent. Par contre il est facile à configurer, ce qui est pratique en mutualisé.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Oui oui ! j'avais vu que le deuxième fonctionnait et j'ai ajouté la ligne setlocale dans mon code car sans ça, je n'avais toujours pas de résultat.

    Quand je disais : "La recherche ne semble plus fonctionner. J'ai aucun résultat et ce n'est pas normal. " --> je répondais à la question envoyée par mon_nom_est_personne qui disait d'utiliser : mb_ereg.

    Maintenant, ça semble fonctionné correctement.

    Un gros merci !!

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

Discussions similaires

  1. Insérer une variable dans une regex?
    Par Death83 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/05/2006, 11h28
  2. [RegEx] php et javascript dans une regex
    Par grochenel dans le forum Langage
    Réponses: 7
    Dernier message: 06/12/2005, 22h21
  3. Réponses: 6
    Dernier message: 14/07/2005, 14h25
  4. Chaines avec caractères accentués dans interbase
    Par Tsimplice dans le forum Bases de données
    Réponses: 4
    Dernier message: 08/03/2004, 17h12
  5. Chaînes avec des caractères accentués dans Interbase
    Par François Marliac dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/03/2004, 22h39

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