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 :

Moteur de recherche et utf8


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 397
    Points : 165
    Points
    165
    Par défaut Moteur de recherche et utf8
    Bonjour,

    je ne sais pas comment résoudre mon problème de moteur de recherche.
    j'ai un formulaire ou l'internaute peut saisir un mot
    j'ai une table qui est en utf8 et qui contient une chaine de plusieurs mots

    Donc dans la table je peux avoir ceci Quinzaine impériale mais également ceci Quinzaine imperiale

    Je modifie la saisie de l'internaute pour passer le mot en minuscule et en utf8 là ça marche
    là ou ça coince c'est sur les accents si l'internaute ne saisie pas l'accent et que dans ma table j'ai impériale comment je faismon Code actuel
    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
    23
    24
    25
    26
     
    //--------------recherche d'un mot dans la table france ------------------------
    $_SESSION['cpt']=0;
    $_SESSION['select_test_mot']=mb_convert_case($_SESSION['select_test_mot'], MB_CASE_LOWER, "UTF-8");
    $_SESSION['select_test_mot']=utf8_encode($_SESSION['select_test_mot']);
     
     
    $query = "SELECT * FROM ".$_SESSION["collec_categ"]."";
    $result = mysqli_query($base_gene, $query);
    while ($data = mysqli_fetch_assoc($result))
    {     
         $texte=explode(' ',trim($data['desi']));
         $r=count($texte);
         for($i=0;$i<$r;$i++)
         {
     
            if(trim($_SESSION['select_test_mot'])==trim(mb_convert_case($texte[$i], MB_CASE_LOWER, "UTF-8")))
              {
                $_SESSION['recherche_lig'][$_SESSION['cpt']]=$data['id']; 
                 $_SESSION['cpt']++;
                break;
               }
         } // fin de boucle for($i=0;$i<$r;$i++)
     
    } // fin de while ($data = mysql_fetch_array($req))
    ?>
    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 356
    Points : 15 702
    Points
    15 702
    Par défaut
    la base de données ne devrait pas contenir des caractères avec des encodage différents dans la même colonnes.
    donc soit vous transformez les données pour tout mettre en UTF-8 dans la même colonnes. ou alors vous pouvez créer plusieurs colonnes pour stocker les encodages différents.

  3. #3
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 397
    Points : 165
    Points
    165
    Par défaut
    Bonjour,

    J'ai pas très bien compris la réponse, le problème se situe entre la saisie de l'internaute et la table (toutes les colonnes sont en utf8)

    Tant qu'il n'y pas d'accent ça marche, le problème c'est si dans la base j'ai un texte avec accent et que l'internaute saisie un mot sans accent évidemment le retour est vide, hors je veux pourvoir afficher la réponse malgré tout
    (l'internaute ne peut pas savoir si le texte dans la base est avec ou sans accent, de plus les internautes saisissent souvent les textes sans les accents)

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    problème classique : pour avoir un moteur de recherche performant, tu dois séparer les données saisies de celles utiles aux moteur de recherche.
    Il te faut enregistrer en plus les données nettoyées de tout particularisme orthographique et faire de même avec le texte de recherche saisi.
    Par la suite tu peux très bien rajouter la possibilité de faire une recherche stricte comme le font beaucoup de moteurs de recherche avec les "..." dans ce cas tu attaques la colonne des données saisies.

  5. #5
    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
    Avec un interclassement utf8_unicode, impériale = imperiale, il n'y a donc pas de problème de recherche d'accents.

    et que dans ma table j'ai impériale
    Comment te retrouves-tu avec ça dans ta table ?

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    @sabotage
    Je n'ai rien pour tester mais je ne suis pas sûr que cela suffise :
    par exemple les caractères exotiques du genre œ correspondant à oe dans une recherche textuelle...

  7. #7
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 397
    Points : 165
    Points
    165
    Par défaut
    Merci

    j'ai suivi les recommandations et tout marche impec

    Bonne soirée

  8. #8
    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
    L'interclassement mysql utf8_unicode associe bien œ à oe et inversement.

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

Discussions similaires

  1. [Info]moteur de recherche full text en environnement j2ee
    Par ddams dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/11/2004, 19h39
  2. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 15h07
  3. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07
  4. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41

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