Joomladay francophone 2018 à Paris 18 et 19 mai

Encore les accents et..com_search !

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Encore les accents et..com_search !

    Bonjour à tous,

    J'essaye de trouver une réponse à une question que beaucoup ont posé.
    Je ne sais pas si celle-ci a été résolue : le problème de la recherche dans Joomla.

    Au delà du problème iso/utf8, la simple recherche peut être problématique : imaginons que dans mes articles, j'ai tapé le mot "référence" de plusieurs manières :
    - référence
    - REFERENCE
    - Reference
    etc..

    Ici, les différences se font entre les majuscules, minuscules et caractères accentués.

    Après avoir fait le test, les résultats renvoyés par le moteur de Joomla sont différents suivant les frappes dans le texte...

    Est-ce qu'une réponse a déjà été trouvé ou non à ce problème ?

    Pour info, j'ai trouvé également ce fil, mais je ne sais pas si c'est d'actualité :

    http://joomlacode.org/gf/project/joo..._item_id=14949

    Cordialement,
    Chabi01 - http://www.xlformation.com

  • #2
    Bonjour,
    c'est pire que ça : dans la base de données référence est stocké référence... par contre pas de perte sur la casse : l'opérateur SQL like n'est pas case sensitive.
    Schtroumpfe toi le Schtroumpf t'aidera.
    Je ne schtroumpfe pas aux demandes de schtroumpf par MP.

    Commentaire


    • #3
      Bien ça grand Schtroumpf (ah, y'en a qui choisisse des pseudo tellement dur à écrire !! Tu aurais du prendre "Schnogourtzaressort", c'est quand même plus facile à épeler...)), c'est déjà ça que Maj/min ne soit pas dans le bouzin.
      Et as-tu entendu parler d'une solution pour ces accents qu'ils soient "bruts" ou passés en htmlentities ?

      Cordialement,
      Chabi01 - http://www.xlformation.com

      Commentaire


      • #4
        Salut,
        suite à ce post (inspirant) et à l'annonce de anonyme pour son composant AdvancedSearch :
        http://forum.joomla.fr/showthread.php?t=106524&page=2

        on a planché sur un hack pour ce pb et ... c'est d'une simplicité éblouissante.
        Je reprends ici la soluce de anonyme.

        Modifier dans libraries\phputf8\stristr.php :
        Code PHP:
        function utf8_stristr($str$search) {

            if ( 
        strlen($search) == ) {
                return 
        $str;
            }

            
        $lstr utf8_strtolower($str);
            
            
        // hack - remove accents - start
            
        $lstr removeAccents($lstr);
            
        // hack - remove accents - end
            
            
        $lsearch utf8_strtolower($search);

            
        // hack - remove accents - start
            
        $lsearchremoveAccents($lsearch);
            
        // hack - remove accents - end
            
            
        preg_match('|^(.*)'.preg_quote($lsearch).'|Us',$lstr$matches);

            if ( 
        count($matches) == ) {
                return 
        substr($strstrlen($matches[1]));
            }

            return 
        FALSE;
        }

        function 
        removeAccents ($lstr) {
            
        $search explode(",""ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u");
            
        $replace explode(",""c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u");
            
        $lstr str_replace($search$replace$lstr);
            
            return  
        $lstr;

        Faire attention au formattage du fichier en utf-8.
        A priori anonyme devrait incorporer cette modif dans son extension.
        “Un message d’erreur sur votre site Joomla ... ayez le reflexe de consulter le nouveau service (en Beta) de la base de connaissance https://kb.joomla.fr

        Commentaire


        • #5
          Alors là Ghazal, je vais tester ça !
          Si cela fonctionne "partout", je tire mon chapeau bas à toi et anonyme ! La grande classe ! Et quand je vois le code, effectivement, simplicité etourdissante !
          Je teste et je reviens faire un tour ici...
          Je croise les doigts !
          Cordialement,
          Chabi01 - http://www.xlformation.com

          Commentaire


          • #6
            Eh ! Je viens de faire les tests...
            Il m'a fallu un peu de temps pour contrôler les résultats !
            J'ai fait un premier test sur du J1.5.9 : là, je n'ai pas vu de différence. Le test a été fait sur un article créé pour l'occasion avec dans le texte le mot "théâtre". Si le texte recherché est différent de la moindre petite lettre accentué, cela ne marche pas.

            J'ai fait ensuite un test sur un J1.5.14.
            Ah!!! Là, c'est beaucoup mieux ! Les résultats mis en surbrillance sont différents, mais on arrive exactement à la même liste d'articles.
            J'ai fait mon test sur un site en fin de dev sur lequelle je bosse en ce moment :
            http://www.perspectives-formation.fr
            Vous pouvez faire le test sur "référente" et "infirmier" (en sachant qu'il y a des infirmiers et des infirmières).

            Une question : le script (si je l'ai bien lu) remplace systématiquement une lettre accentuée par la même lettre non accentuée.
            Comment le script va se comporter si je tape "theatre" et que dans le texte est écrit "théâtre" ?
            Autrement posé : le script supprime les accents dans la recherche, dans le texte recherché, ou les 2 ?

            Cordialement,
            Chabi01 - http://www.xlformation.com

            Commentaire


            • #7
              Bonjour,
              le script supprime les accents dans la recherche, dans le texte recherché, ou les 2 ?
              Cette histoire m'a intrigué vu que je pensais que les données étaient toujours passée à l'encodeHTML avant enregistrement. Mais depuis J!1.5 la base est utf-8 donc les articles notamment sont stockés "tels quels".

              Or, si je mets dans une table utf-8 trois enregistrements contenant respectivement garcon, garçon, GARÇON et que je fais un
              Code:
              select * from matable where monchamp like '%garçon%'
              ( ou like '%GARÇON%' ou like '%garcon%') les trois enregistrements remontent.

              Même avec le module de recherche standard infimier, infirmièr ou infirmiêr devraient ramener la même chose.

              Mais si la requête du plugins/search/content.php dans un premier temps fait bien son boulot, c'est ensuite qu'un dernier filtre est appliqué :
              Code PHP:
              foreach($row AS $key => $article) {
                  if(
              searchHelper::checkNoHTML($article$searchText, array('text''title''metadesc''metakey'))) {
                      
              $new_row[] = $article;
                  }

              En fait cette boucle vérifie que les termes cherchés ne sont pas dans de l'html (fonction checkNoHTML) : pour le SQL c'était kif ! Après avoir viré les expressions régulières correspondant à des balises, la recherche est réappliquée au texte restant (ainsi par exemple <span id="infirmier"> est ingnoré, et cette fois ça coince avec les accents. C'est là qu'intervient le stristr
              Code PHP:
              foreach($terms AS $term) {
                  if(
              JString::stristr($text$term) !== false) {
                      return 
              true;
                  }

              $texte contient le texte nettoyé et $term successivement chacun des mots clés de recherche.

              La réponse à la question est donc : les deux, mais aucun. Aucun lors de la requète (ouf) et les deux lors du filtre final.

              Il faudrait vérifier si les bases migrées depuis les version J!1.0 ne contiennent encore des &eacutes; sinon c'est pas gagné pour elles !

              Pour finir, tu noteras que qand tu cherches infirmier, infirmièr n'est pas surligné dans le texte ramené. On n'est pas encore sorti de l'auberge avec nos accents...
              Schtroumpfe toi le Schtroumpf t'aidera.
              Je ne schtroumpfe pas aux demandes de schtroumpf par MP.

              Commentaire


              • #8
                Merci de ta démonstration G. Choutroumepefe.
                J'avais bien remarqué que le texte trouvé n'était pas surligné.

                Effectivement, je crois que nos accents vont encore nous amuser longtemps dans le module de recherche...mais si Flyo6 et Ghazal ont pu déjà trouver un début de réponse, c'est..un début !

                Google ne tenant pas compte des caractères diacritiques, c'est à se demander si intégrer un moteur de recherche via une api google dans un site Joomla n'est pas la meilleure solution...
                J'attends de voir le résultat de anonyme et Ghazal.

                Sinon, pour info, j'ai une fois contourné le problème avec Custom Properties permettant d'ajouter des "tags" de classement pour les articles (c'est comme ça que j'ai utilisé le composant) :
                http://www.solidsystem.it/index.php/Custom-Properties/
                Du coup, la personne faisant une recherche fait une recherche sur les infirmier, les articles avec les infirmiers et les infirmières étant taggés de la même façon. Ce n'est pas la solution au problème des accents, mais pour des sites où il es impératif que ce soit résolu, c'est un forme de solution.

                Cordialement,
                Dernière édition par chabi01 à 03/11/2009, 14h25 Raison: ajout texte explicatif
                Chabi01 - http://www.xlformation.com

                Commentaire

                Annonce

                Réduire
                1 sur 2 < >

                C'est [Réglé] et on n'en parle plus ?

                A quoi ça sert ?
                La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                Comment ajouter la mention [Réglé] à votre discussion ?
                1 - Aller sur votre discussion et éditer votre premier message :


                2 - Cliquer sur la liste déroulante Préfixe.

                3 - Choisir le préfixe [Réglé].


                4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                2 sur 2 < >

                Assistance au forum - Outil de publication d'infos de votre site

                Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                UTILISER À VOS PROPRES RISQUES :
                L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                Problèmes connus :
                FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                Installation :

                1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                Archive zip : https://github.com/AFUJ/FPA/zipball/master

                2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                et remplacer www. votresite .com par votre nom de domaine


                Exemples:
                Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                Télécharger le script fpa-fr.php dans: /public_html/
                Pour executer le script: http://www..com/fpa-fr.php

                Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                Télécharger le script fpa-fr.php dans: /public_html/cms/
                Pour executer le script: http://www..com/cms/fpa-fr.php

                En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                Voir plus
                Voir moins
                Travaille ...
                X