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 :

[REGEXP] accents dans un moteur de recherche


Sujet :

Langage PHP

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut [REGEXP] accents dans un moteur de recherche
    Bonjour !
    Me voici avec une interrogation a propos des regexp.
    Je suis en train de créer un moteur de recherche pour un site.
    Jusque la, je fonctionnais de la manière suivante:
    Je récupère le critére de ma recherche.
    Je crée un pattern pour mettre en surbrillance/
    et je faisais un bête eregi_replace($recherche,$pattern,$ma_chaine) pour afficher les résultats.
    Hors, cette méthode ne gère pas les accents, c'est à dire que si je fais par exemple:
    recherche="methode"
    pattern="<higlight>methode</higlight>
    $ma_chaine="la vérité sur les méthodes".

    La surbrillance ne s'applique pas.
    J'ai alors pensé a retirer les accents de mes chaines, a la fois dans la recherche et a la fois dans le résultat à afficher.

    Cependant, mon affichage présentera un texte sans accent du type: "la verite sur les methodes". ce qui ne me convient pas à vrai dire.

    La seule méthode acceptable que j'ai trouvé est une vraie usine a gaz ^^
    Si vous pouviez m'aider la dessus, ce serait sympa !
    Merci d'avance!

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Je pense que dans ce cas il est difficile de ne pas faire usine à gaz...
    Voici ce que j'aurais fait :
    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
    17
    18
    19
    20
    21
    22
    <?php
     
    $s = "methode";
    $t = $original = "La vérité sur les méthodes. Méthode avec des majuscule ? 
    Méthodologique ne match pas. Et methode sans accents ?";
     
    //Passage en minuscule
    $t = strtolower($t);
    //On supprime tous les accents possibles et inimaginables
    $t = str_replace(array('é', 'è', 'ê'), 'e', $t);
     
    $current = $offset = $delta = 0;
    $len = strlen($s);
    while(FALSE !== ($pos = strpos($t, $s, $offset))) {
        $original = substr($original, 0, $pos+$delta) 
                     . '<b>' . substr($original, $pos+$delta, $len) . '</b>' 
                     . substr($original, $pos+$delta+$len);
        $delta += 7; // Rajout de la chaine '<b></b>'
        $offset = $pos + 1;
    }
    echo $original;
    ?>
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    La vérité sur les méthodes. Méthode avec des majuscule ? 
    Méthodologique ne match pas. Et methode sans accents ?

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Merci Mister N de ta réponse, tu confirmes ce que je pensais sauf que tu le fais en plus simple que moi donc ça m'arrange

    J'ai un peu arrangé ton code a ma sauce (changement du delta et gestion complète des remplacements pour les accents (voir plus bas pour le script).
    Merci bien en tout cas et bonne journée:

    Script pour virer les accents (strtr serait plus rapide selon iubito de ce même site).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function delaccents($chaine){
        $chaine = ereg_replace('[àâäåãáÂÄÀÅÃÁæÆ]','a', $chaine);
        $chaine = ereg_replace('[çÇ]','c', $chaine);
        $chaine = ereg_replace('[éèêëÉÊËÈ]','e', $chaine);
        $chaine = ereg_replace('[ïîìíÏÎÌÍ]','i', $chaine);
        $chaine = ereg_replace('[ñÑ]','n', $chaine);
        $chaine = ereg_replace('[öôóòõÓÔÖÒÕ]','o', $chaine);
        $chaine = ereg_replace('[ùûüúÜÛÙÚ]','u', $chaine);
        $chaine = ereg_replace('[ÿ]','y', $chaine);
        return $chaine;
    }

  4. #4
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Points : 174
    Points
    174
    Par défaut
    Je complete avec plus de caractères.

    Par contre, n'y a-t-il aps de meilleure methode pour faire l'equivalent strtr en multibytes ?

    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
    17
     
    function _cleanAccent($sToClean) {
     
            $sToClean = mb_ereg_replace('[àâäåãáÂÄÀÅÃÁæÆ]',  'a', $sToClean);
    	$sToClean = mb_ereg_replace('[ß]',               'b', $sToClean);
            $sToClean = mb_ereg_replace('[çÇ]',              'c', $sToClean);
            $sToClean = mb_ereg_replace('[Ð]',               'd', $sToClean);
            $sToClean = mb_ereg_replace('[éèêëÉÊËÈ]',        'e', $sToClean);
            $sToClean = mb_ereg_replace('[ïîìíÏÎÌÍ]',        'i', $sToClean);
            $sToClean = mb_ereg_replace('[ñÑ]',              'n', $sToClean);
            $sToClean = mb_ereg_replace('[öôóòõÓÔÖÒÕ]',      'o', $sToClean);
            $sToClean = mb_ereg_replace('[Šš]',              's', $sToClean);
            $sToClean = mb_ereg_replace('[ùûüúÜÛÙÚ]',        'u', $sToClean);
            $sToClean = mb_ereg_replace('[¥ŸÝŸýÿ]',          'y', $sToClean);
            $sToClean = mb_ereg_replace('[Žž]',              'z', $sToClean);
            return $sToClean;
    	}
    Bonne journée a tous

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

Discussions similaires

  1. Calcul de la pertinence des mots dans un moteur de recherche
    Par kilian67 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 04/10/2012, 15h13
  2. Réponses: 2
    Dernier message: 23/01/2008, 08h36
  3. Réponses: 5
    Dernier message: 16/05/2007, 23h25
  4. Enlever Les Indexations Dans Les Moteurs De Recherche
    Par RICHARD1232 dans le forum Sécurité
    Réponses: 2
    Dernier message: 26/06/2006, 21h13
  5. Comment référencer mon site dans les moteurs de recherches ?
    Par Viper7 dans le forum Référencement
    Réponses: 9
    Dernier message: 07/06/2006, 23h18

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