Affichage résultat moteur de recherche PHP

Eléphanteau du PHP | 11 Messages

03 mars 2011, 00:57

Bonjour,

Pour le site d'un ami, je voudrais afficher les résultats d'une recherche en affichant le mot recherche en gras et dans son contexte (précédé et suivi de 10 mots par exemple, comme ça se fait beaucoup sur les sites. Et je voudrais que l'utilisateur puisse cliquer sur cette ligne pour être dirigé vers la page qui la contient.

Mes textes sont contenus dans une base de données qui contient des paragraphes. Actuellement, lors d'une recherche sur un mot, le résultat affiche le mot en gras et le paragraphe entier dans lequel il est contenu, plus un lien vers la page qui contient ce paragraphe.

Pour le gras, j'ai réussi avec
echo str_replace($mot, "<strong>$mot</strong>", $para['paragraphe']);

Mais je ne trouve pas pour afficher le mot dans son contexte...

Voici mon code entier:
$requete = "SELECT * FROM textes AS T, pages AS P WHERE P.id=T.idpage AND T.paragraphe LIKE '%$mot%'";

$resultat = mysql_query ($requete, $connexion);

while ($para = mysql_fetch_array ($resultat)) {
echo "<li>";
echo "<a href=\"$para[scriptphp]\">$para[titre]</a><br />";
echo str_replace($mot, "<strong>$mot</strong>", $para['paragraphe']);
echo "</li>";
}
echo "</ul>";

Merci beaucoup de votre attention!!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 mars 2011, 22:42

Il te faut utiliser une expression régulière pour capturer les éventuels 10 mots qui précèdent la chaine que tu recherches, et les potentiels 10 mots qui le suivent. Un preg_match() te permettra d'extraire cette chaine de ton paragraphe, la difficulté étant de constituer le bon masque :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 11 Messages

08 mars 2011, 14:13

Merci!
et est-ce qu'il existe un masque qui peut prendre en compte toutes les possibilités?
quelque chose du genre? [a-zA-Z]?
Parles-tu bien des expressions régulières quand tu utilises le terme masque?
Les mots qui précéderont et suivront seront différents pour chaque résultat.

Et n'y a t-il pas de code "tout fait" pour ce genre d'affichage?