Mise en évidence des mots recherchés

Résolu
RPGamer Messages postés 10 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 25 juillet 2008 - 17 avril 2008 à 11:45
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 20 avril 2008 à 10:08
Bonjour à tous ^^

Je suis en train de développer un moteur de recherche pour mon site. J'ai décidé de mettre les mots recherchés en gras dans les résultats. Ca fonctionne bien, mais comme je suis pinailleur, j'aimerais que la fonction eregi_replace() qui ne prend pas en compte la casse au moment de la recherche du terme ne remplace pas le mot trouvé par celui tappé par l'utilisateur mais par celui qui est stocké dans la table MySQL.

Pour faire plus clair :

$city = 'Mon texte de base';
$keyword = 'mon';

$city = eregi_replace($keyword, "".$keyword."", $city);

Dans ce cas, $city vaut "mon texte de base" et non pas "Mon texte de base".

Comment faire pour que ça ne soit pas le cas ?

Merci d'avance

7 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
18 avril 2008 à 18:10
perso, je fais toujours des pregs, je connais mieux la syntaxe des pregs :

$city = preg_replace('/('.$keyword.')/', '$1', $city);

ca ca devrait marcher...

si ca ne marche pas, donne moi un exemple pour $keyword et $city.

$1 n'est pas une variable, c'est normal que ca parse error... c'est un truc specifique aux regexp, rien a voir avec le php...
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
17 avril 2008 à 13:16
salut

le principe : il faut capturer la chaine qui correspond au motif : $keyword.

$city = eregi_replace('/('.$keyword.')/', '$1', $city);
un truc comme ca ?

sinon, juste un petit conseil de securite : si $keyword est defini par l'utilisateur, alors, il peut faire en sorte que la page mette 30 secondes a s'excuter (imagine si il demande cette page 10 fois par seconde, juste pour t'embeter...)
0
RPGamer Messages postés 10 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 25 juillet 2008
18 avril 2008 à 17:36
Salut,

J'ai essayé ton botu de code, et ça n'a pas l'air de marcher.
Sinon, d'où est-ce que tu sors la variable $1 ?

Au niveau de la sécurité, effecfivement j'imagine que n'importe quelle page peut être demandée un nombre quasi illimité de fois, mais est-ce vraiment utile de s'assurer sur chacunes des nombreuses pages du site qu'elle n'a pas été demandée x fois en un temps x par une IP donnée ?

$keywords est en fait un tableau qui contient chaque mots tapé par l'utilisateur dans le champ. J'utilise une boucle foreach() pour mettre les termes recherchés en gras. Je m'assure aussi qu'il n'y aie pas de HTML avec la fonction strip_tags().

Merci
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
18 avril 2008 à 17:43
$1 c'est la premiere chaine capturee par ()... c'est un truc specifique aux regexp.

pour le reste, je n'ai pas la reponse, c'est a toi de choisir ce que tu verouilles ou pas...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RPGamer Messages postés 10 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 25 juillet 2008
18 avril 2008 à 17:55
OK, merci :)

J'ai essayé d'autres possibilités comme :

$city = eregi_replace('/('.$keywords.')/', " $1 ", $city);

ou

$city = eregi_replace('/('.$keywords.')/', ''.$1.'', $city);

Dans le premier cas, rien n'est mis en gras, dans l'autre, un message d'erreur m'indique apparement qu'il ne connait pas $1...
(Parse error: syntax error, unexpected T_DNUMBER, expecting T_VARIABLE or '$')
0
RPGamer Messages postés 10 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 25 juillet 2008
19 avril 2008 à 19:37
Salut ^^

J'ai testé ta ligne. Le résultat est encourageant, si je tape "parking", le mot en question est mis en gras. Mais si il s'agit du mot "Parking", il n'est pas mis en gras. Il faudrait donc que la fonction de mise en gras ne tienne pas compte de la casse.

En me renseignant sur la question, j'ai trouvé sans trop de mal la bonne syntaxe :

$city = preg_replace('/('.$keyword.')/i', '$1', $city);

Encore merci pour cette précieuse aide
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
20 avril 2008 à 10:08
clique sur reponse acceptee stp
0