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

Requêtes MySQL Discussion :

Recherche insensible aux accents avec REGEXP


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Par défaut Recherche insensible aux accents avec REGEXP
    Bonjour,

    je cherche à développer un mini moteur de recherche interne en php-mysql pour un site web.
    Ma base de données étant en inno db, je ne peux donc pas utiliser la recherche en fulltext.

    Malgré un encodage en utf8, j'ai des soucis d'accents qui font que si je cherche le mot "ecole", il ne trouvera pas de résultat même si "école" est présent. L'inverse est aussi vrai.

    Afin de résoudre ce problème, je me suis lancée dans l'utilisation de REGEXP pour mes requêtes.
    Pour chacun des mots entrés par l'internaute, je remplace, comme suggéré sur plusieurs forums, chacune de mes voyelles par un panel de voyelles avec ou sans accent.

    J'obtiens ainsi par exemple pour le mot "école", la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT act_uid AS uid, act_titre AS titre, act_texte AS description FROM actualites WHERE ( act_titre REGEXP '[e|é|è|ê|ë]c[o|õ|ò|ó|ô|ö]l[e|é|è|ê|ë]' OR act_texte REGEXP '[e|é|è|ê|ë]c[o|õ|ò|ó|ô|ö]l[e|é|è|ê|ë]' )"
    Hélas, dans certains cas, cela ne fonctionne pas ... Tout marche parfaitement quand l'accent situé sur le mot est au début ou à la fin de celui-ci :

    Par exemple :
    - si je tape "actualite" ou "actualité", il me trouve bien pour résultat "actualité"
    - si je tape "école" ou "ecole", j'obtiens bien "école"
    - si je tape "acheve" ou "achevé", j'obtiens bien "achevé"

    MAIS :
    - si je tape "defaut" ou "défaut", il ne me trouve pas "défaut"
    - si je tape "pêche" ou "peche", il ne me trouve pas "empêche"
    - et ainsi de suite ...

    Je ne suis pas une experte en expression régulière et je sollicite donc votre aide :
    quelqu'un pourrait-il m'aider à trouver la bonne syntaxe ?

    Merci d'avance !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 138
    Par défaut
    Salut,

    Je ne suis pas très bon non plus en REGEXP, mais il me semble que sous cette forme, ton pb devrait être résolu :

    ^ indique le début de la chaine et $ la fin

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Par défaut
    Merci pour ta réponse, mais si j'indique un début et une fin de chaîne, cela ne va-t-il pas me bloquer une recherche à l'intérieur d'un mot (par exemple, chercher "actualité" et ne pas me trouver le résultat au pluriel "actualités") ?

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Et si tu essayais de tout convertir en majuscules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT act_uid AS uid, 
      act_titre AS titre, 
      act_texte AS description 
    FROM actualites 
    WHERE UPPER(act_titre) LIKE UPPER('%chaîne recherchée%')
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Par défaut
    Ca ne fonctionne pas non plus ... sans doute une question d'encodage ...

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut
    Ton utilisation de regexp pour "école" semble correcte.

    Toutefois tu déclares: "Je ne suis pas une experte en expression régulière".

    Aussi, je serais curieux de voir ton select pour les cas qui ne fonctionnent pas.

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par khasyt Voir le message
    Ca ne fonctionne pas non plus ... sans doute une question d'encodage ...
    Qu'est-ce qui ne fonctionne pas ?
    Message d'erreur (si oui lequel ?) ou pas le résultat escompté ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Recherche insensible aux accents
    Par Warluck dans le forum Administration
    Réponses: 4
    Dernier message: 24/09/2013, 14h25
  2. [script.aculo.us] Autocompleter insensible aux accents
    Par oceanbigone dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 09/12/2008, 01h35
  3. [MySQL] Recherche insensible aux accentuations
    Par toony dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 11/07/2008, 09h04
  4. [MySQL] Recherche avec REGEXP
    Par dream_of_australia dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/07/2007, 18h03
  5. Recherche insensible à la casse ET insensible aux accents.
    Par Bernard Grosdoy dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 10/07/2005, 03h32

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