Bonjour,
Pour mon moteur de recherche, je cherche à changer une fonction qui me permettait d'afficher une position du mots clefs dans mon texte avec un bloc de 400 caractères.
Maintenant, j'aimerais qu'il m'affiche des phrases de 100 caractères à chaque fois qu'il trouve le mot cléf, mais que dès qu'il atteint 400 caractères, qu'il affiche (...) et plus rien d'autres... ça c'est ok mais pas certain de le faire correctement...
Donc, la fonction ci-dessous tourne sans bug (miracle rire..), par contre je n'arrive pas intégrer le htmlspecialchars + le UFT-8 dans le foreach pour éviter les résultats �.
Le résultat
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 <?php $keywordsy = "météo"; function get_snippet($keywordsy, $texte) { $snippet=''; $span = 100; $strlen_max = 400; $words = join('|', explode(' ', preg_quote($keywordsy))); preg_match_all("#(\W.{0,$span}\W)($keywordsy)(\W.{0,$span}\W)#i", " $texte ", $matches); foreach($matches[0] as $match) { if (!$match = trim($match)) continue; if (isset($snippet)) $snippet .= "$match..."; else $snippet = "...$match..."; if (strlen($snippet.htmlspecialchars($match[0], 0, 'UTF-8')."... ") > $strlen_max) break; } $snippet = preg_replace("#($words)#i", '<b>$1</b>', $snippet); return $snippet; } $description2 = get_snippet($keywordsy, $texte); echo $description2; ?>
La fonction que j'utilise actuellement ne satisfait plus à mes besoins...(mais le htmlspecialchars et UFT-8 fonctionne )�ne sortira finalement pas en 2018 d'après james cameron mélanie ségard, trisomique, présente la météo: le handicap sous un jour positif gouvernement marine le pen : philipot premier ministre ? quelle �...de l'ue et de l'otan tatiana silva : mannequin, ex de stromae... qui est la nouvelle présentatrice météo de tf1 ? attentat du drugstore publicis: carlos jugé pour assassinats affaire penelope fillon :....
D'avance merci pour votre précieuse aide
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 $keywordsy = "$keywords"; function snippet_max($texte, $keywordsy, $strlen_max) { $keywordsy = trim(preg_replace("#( [[:alnum:]]{1,4} )#Ui", " ", " ".$keywordsy." ")); // ajout d'un espace avant et après $words = join('|', explode(' ', preg_quote($keywordsy))); //lookahead/behind assertions ensures cut between words $s = '\s\x00-/:-@\[-`{-~'; //character set for start/end of words preg_match_all('#(?<=['.$s.']).{1,100}(('.$words.').{1,100})+(?=['.$s.'])#uis', $texte, $matches, PREG_SET_ORDER); $result = ""; foreach($matches as $line) { if (strlen($result.htmlspecialchars($line[0], 0, 'UTF-8')."... ") > $strlen_max) break; $result .= htmlspecialchars($line[0], 0, 'UTF-8')."... "; } //highlight $result = preg_replace('#'.$words.'#iu', "<span class=\"highlight_word\">\$0</span>", $result); return $result; }
Yule
Partager