Changeset 97762 in spip-zone for _plugins_/fulltext


Ignore:
Timestamp:
May 13, 2016, 6:51:40 PM (4 years ago)
Author:
marcimat@…
Message:

Éviter des divisions par zéro sur des expressions de recherches imbéciles,
qui créent des expression régulières toujours vraies, même si un champ n'a pas de contenu.
Exemples : ' ' (espace), '/.*/', '/(.*)/'

Location:
_plugins_/fulltext/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/fulltext/trunk/inc/recherche_to_array.php

    r97655 r97762  
    356356                                        $champ = explode('.', $champ);
    357357                                        $champ = end($champ);
    358                                         // translitteration_rapide uniquement si on est deja en utf-8
    359                                         $value = ($GLOBALS['meta']['charset']=='utf-8' ? translitteration_rapide($t[$champ]) : translitteration($t[$champ]));
    360                                         if ($n =
    361                                                 ($options['score'] || $options['matches'])
    362                                                 ? preg_match_all($preg, $value, $regs, PREG_SET_ORDER)
    363                                                 : preg_match($preg, $value)
    364                                         ) {
    365                                                 $vu = true;
    366 
    367                                                 if ($options['champs']) {
    368                                                         $champs_vus[$champ] = $t[$champ];
    369                                                 }
    370                                                 if ($options['score']) {
    371                                                         // on pondere le nombre d'occurence par une fonction inverse de la longueur du contenu
    372                                                         // 1 = 1 occurence pour 200 mots de 8 lettres = 1600 signes
    373                                                         $score += $n * $poids * sqrt(sqrt(1600/strlen($t[$champ])));
    374                                                 }
    375                                                 if ($options['matches']) {
    376                                                         $matches[$champ] = $regs;
    377                                                 }
    378                                                 if (!$options['champs']
    379                                                         and !$options['score']
    380                                                         and !$options['matches']) {
    381                                                         break;
     358                                        // éviter des divisions par zéro sur le calcul du score :
     359                                        // tester seulement les champs avec du contenu !
     360                                        if ($len = strlen($t[$champ])) {
     361                                                // translitteration_rapide uniquement si on est deja en utf-8
     362                                                $value = ($GLOBALS['meta']['charset']=='utf-8' ? translitteration_rapide($t[$champ]) : translitteration($t[$champ]));
     363                                                if ($n =
     364                                                        ($options['score'] || $options['matches'])
     365                                                        ? preg_match_all($preg, $value, $regs, PREG_SET_ORDER)
     366                                                        : preg_match($preg, $value)
     367                                                ) {
     368                                                        $vu = true;
     369
     370                                                        if ($options['champs']) {
     371                                                                $champs_vus[$champ] = $t[$champ];
     372                                                        }
     373                                                        if ($options['score']) {
     374                                                                // on pondere le nombre d'occurence par une fonction inverse de la longueur du contenu
     375                                                                // 1 = 1 occurence pour 200 mots de 8 lettres = 1600 signes
     376                                                                $score += $n * $poids * sqrt(sqrt(1600/$len));
     377                                                        }
     378                                                        if ($options['matches']) {
     379                                                                $matches[$champ] = $regs;
     380                                                        }
     381                                                        if (!$options['champs']
     382                                                                and !$options['score']
     383                                                                and !$options['matches']) {
     384                                                                break;
     385                                                        }
    382386                                                }
    383387                                        }
  • _plugins_/fulltext/trunk/paquet.xml

    r96626 r97762  
    22        prefix="fulltext"
    33        categorie="navigation"
    4         version="1.1.11"
     4        version="1.1.12"
    55        etat="test"
    66        compatibilite="[3.0.1;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.