Mise en évidence des mots recherchés [Résolu]

Signaler
Messages postés
10
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
25 juillet 2008
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
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

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
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...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
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...)
Messages postés
10
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
25 juillet 2008

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
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
$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...
Messages postés
10
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
25 juillet 2008

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 '$')
Messages postés
10
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
25 juillet 2008

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
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
clique sur reponse acceptee stp