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 :
"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 !
Partager