Gestion des accents pour un moteur de recherche PHP

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

Fredo
Nouveau WRInaute
 
Messages: 7
Inscription: Mer Sep 17, 2003 16:05

Gestion des accents pour un moteur de recherche PHP

Message le Lun Sep 22, 2003 17:49

Salut,

Connaissez-vous le moyen de rechercher en PHP un mot dans une base quelconque avec ou sans accent ?

Merci beaucoup.

Fredo[/quote]


Remi L.
WRInaute accro
WRInaute accro
 
Messages: 1062
Inscription: Sam Sep 06, 2003 16:23

Message le Lun Sep 22, 2003 17:57

Je n'ai peut-être pas bien compris ta question mais il suffit de stocker les données dans ta base sans accent et d'enlever les accents du mot recherché avant de fouiller dans tes petits octets...

Pour enlever les accents tu peux utiliser un truc du genre:
Code: Tout sélectionner
function sans_accent($chaine)
{
   $accent  ="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ";
   $noaccent="aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyyby";
   return strtr(trim($chaine),$accent,$noaccent);
}


C'est une solution ultra-simple, il y en a d'autres...


mahefarivony
WRInaute accro
WRInaute accro
 
Messages: 11405
Inscription: Lun Oct 14, 2002 10:00

Message le Lun Sep 22, 2003 18:12

dans sa base, il a :
événement
évènement
evenement

en faisant une recherche avec evenement, l'ideal serait que les 3 ressortent ...

c'est bien cela ?


George Abitbol
WRInaute accro
WRInaute accro
 
Messages: 1923
Inscription: Ven Juin 06, 2003 7:57

Message le Lun Sep 22, 2003 20:00

mahefarivony a écrit:en faisant une recherche avec evenement, l'ideal serait que les 3 ressortent ...


Pour ma part, avec MySQL et en ne faisant rien de spécial, c'est ce qui se produit.
Mes champs sont de type TEXT (insensible à la casse). Il en serait peut-être autrement avec un champ BLOB.

Fred

JPC
WRInaute passionné
WRInaute passionné
 
Messages: 565
Inscription: Lun Juin 02, 2003 10:19

Message le Lun Sep 22, 2003 21:41

de toutes façons, l'attitude par rapport aux majuscules particulièrement, et aussi aux accents, ça dépend fortement de la base de données et de sa configuration...

Fredo
Nouveau WRInaute
 
Messages: 7
Inscription: Mer Sep 17, 2003 16:05

Message le Mar Sep 23, 2003 8:16

mahefarivony a écrit:dans sa base, il a :
événement
évènement
evenement

en faisant une recherche avec evenement, l'ideal serait que les 3 ressortent ...

c'est bien cela ?


Exactement
Avec l'inverse éventuellement : en cherchant évènement on trouverait evenement

Fredo
Nouveau WRInaute
 
Messages: 7
Inscription: Mer Sep 17, 2003 16:05

Message le Mar Sep 23, 2003 8:23

Remi L. a écrit:Je n'ai peut-être pas bien compris ta question mais il suffit de stocker les données dans ta base sans accent et d'enlever les accents du mot recherché avant de fouiller dans tes petits octets...

Pour enlever les accents tu peux utiliser un truc du genre:
Code: Tout sélectionner
function sans_accent($chaine)
{
   $accent  ="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ";
   $noaccent="aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyyby";
   return strtr(trim($chaine),$accent,$noaccent);
}


C'est une solution ultra-simple, il y en a d'autres...


------------------------

Merci pour cette astuce. Le problème est que les chaînes stockées dans des champs 'VARCHAR' et 'TEXT' contiennent nécessairement des accents. Je vais voir comment adapter cette fonction.

Fredo
Nouveau WRInaute
 
Messages: 7
Inscription: Mer Sep 17, 2003 16:05

Message le Mar Sep 23, 2003 9:41

Ma requête SQL de recherche est du genre :
SELECT * FROM table WHERE champs = '$expression_recherchee'

Le but étant de supprimer les accents, on applique la fonction sans_accent() sur la variable PHP $expression_recherchee.

Mais il faut aussi appliquer le même genre de fonction (en version SQL) sur le champs de la table.

Existe-t-il une astuce (équivalent SQL de strtr() ou autre) ?

Oncle Tom
WRInaute passionné
WRInaute passionné
 
Messages: 812
Inscription: Lun Mar 31, 2003 11:16

Message le Mer Sep 24, 2003 19:38

Et actuellement ça te retourne quoi pour l'exemple avec le mot 'évènement' ?

Fredo
Nouveau WRInaute
 
Messages: 7
Inscription: Mer Sep 17, 2003 16:05

Message le Jeu Sep 25, 2003 8:18

The Jedi a écrit:Et actuellement ça te retourne quoi pour l'exemple avec le mot 'évènement' ?


Quand je tape 'évènement', mon moteur ne peut retourner que 'évènement' (et pas 'evenement').

Quand je tape 'evenement', mon moteur ne peut retourner que 'evenement' (et pas 'évènement').

Autrement dit, il ne peut faire la recherche que sur le mot tel qu'il est saisi au clavier.


mahefarivony
WRInaute accro
WRInaute accro
 
Messages: 11405
Inscription: Lun Oct 14, 2002 10:00

Message le Jeu Sep 25, 2003 10:09

SELECT * FROM table WHERE champs like '$expression_recherchee'


George Abitbol
WRInaute accro
WRInaute accro
 
Messages: 1923
Inscription: Ven Juin 06, 2003 7:57

Message le Jeu Sep 25, 2003 10:11

Ta base de données c'est Mysql ? Quelle version ? Le type de tes champs ?
Parce que je viens encore de tester pour être sûr, et avec un champ TEXT ou VARCHAR, 'événement' ressort pour une recherche sur 'evenement', 'évenement', 'événement', 'évênëmènt', etc.
Et inversement, 'evenement' ressort pour une recherche sur 'événement', 'evénement', etc.

Fred

JPC
WRInaute passionné
WRInaute passionné
 
Messages: 565
Inscription: Lun Juin 02, 2003 10:19

Message le Jeu Sep 25, 2003 12:49

c'est clair chaque base a sa façon de gérer les majuscules et accents, ses paramètres à ce sujet etc... et même son langage, si tu voulais trnasformer le contenu (transac-sql pour sql serveur pour l'exemple puisque lui a même un nom ;-) )

Fredo
Nouveau WRInaute
 
Messages: 7
Inscription: Mer Sep 17, 2003 16:05

Message le Ven Sep 26, 2003 9:11

George Abitbol a écrit:Ta base de données c'est Mysql ? Quelle version ? Le type de tes champs ?
Parce que je viens encore de tester pour être sûr, et avec un champ TEXT ou VARCHAR, 'événement' ressort pour une recherche sur 'evenement', 'évenement', 'événement', 'évênëmènt', etc.
Et inversement, 'evenement' ressort pour une recherche sur 'événement', 'evénement', etc.

Fred


Ma base est de type MySQL et mes champs des TEXT et VARCHAR.

Maintenant, ça marche. J'ai enfin compris que la fonction LIKE permet la recherche d'une chaîne de caractères sans tenir compte des accents.

Vos réponses m'ont beaucoup aidé. Merci !


George Abitbol
WRInaute accro
WRInaute accro
 
Messages: 1923
Inscription: Ven Juin 06, 2003 7:57

Message le Ven Sep 26, 2003 9:57

Fredo a écrit:J'ai enfin compris que la fonction LIKE permet la recherche d'une chaîne de caractères sans tenir compte des accents


Je voudrais pas avoir l'air d'insister :D mais quand j'ai fait mes tests, c'était avec = et pas avec LIKE (mais ça marche avec les deux).
Enfin bon, de toute façon, si c'est pour une recherche mieux vaut effectivement utiliser LIKE, mais alors autant le faire avec % de part et de d'autre du mot à rechercher...

LIKE '%eve%' <-- trouve 'eve', 'évènement', 'rêve', 'grèves', etc.

Fred

Gestion des accents pour un moteur de recherche PHP

Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google SearchMash

  • Analyse du positionnement
    AgentWebRanking est un logiciel professionnel qui permet d'analyser le positionnement d'un ou plusieurs sites dans plus de 300 moteurs de recherche dans le monde. Vous pouvez ainsi analyser les performances du référencement pour de nombreux mots-clés.
  • Transformer des simples citations de votre site en liens
    Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités