Salut à tous,

Je suis en train de faire un formulaire de recherche sur un site et je voudrais faire en sorte de lui sortir toutes les occurrences des mots recherchés un peu comme ceci :
Texte en BDD :

<p>Ceci est <span>une phrase</span> très longue mais ce n'est pas grave car ma phrase se répète beaucoup.</p>

Mot clé : phrase
Valeur de retour :

<p>[...] <span>une <i>phrase</i></span> très longue[...]</p>
<p>[...]car ma <i>phrase</i> se répète [...]</p>

En gros, je voudrais afficher au centre le mot que je recherche en italique et que de chaque coté j'ai un certain nombre de caractères (10 par exemple) et bien sur en conservant mon HTML s'il est tronqué.

Vous avez des idées pour programmer ça ?

J'ai déjà fais une ébauche mais qui n'est pas top :

$text = strip_tags($text);
$startPos = strpos($text, $words);
$start_left = $startPos - $each_side;
$left = '[...]' . substr($text, ($start_left < 0) ? 0 : $start_left, $each_side);
$start_right = $startPos + strlen($words);
$right = substr($text, ($start_right > strlen($text)) ? strlen($text) : $start_right, $each_side) . '[...]';
return $left . '<span class=' . $css_class . '>' . $words . '</span>' . $right;

Merci à tous et bonne journée

1 réponse


BaBeuloula
Auteur
Réponse acceptée

J'ai finalement trouvé comment faire mon système grâce aux RegEx que j'avais totalement oublié.

Dites moi ce que vous en pensez, si il y a des améliorations à faire : https://github.com/babeuloula/Highlight-Search/blob/master/HighlightSearch.php