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

Messages postés
10
Date d'inscription
vendredi 6 mai 2005
Dernière intervention
25 juillet 2008
- - Dernière réponse : coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Dernière intervention
30 juillet 2012
33
3
Merci
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...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Dernière intervention
30 juillet 2012
33
0
Merci
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...)
Commenter la réponse de coucou747
Messages postés
10
Date d'inscription
vendredi 6 mai 2005
Dernière intervention
25 juillet 2008
0
Merci
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
Commenter la réponse de RPGamer
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Dernière intervention
30 juillet 2012
33
0
Merci
$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...
Commenter la réponse de coucou747
Messages postés
10
Date d'inscription
vendredi 6 mai 2005
Dernière intervention
25 juillet 2008
0
Merci
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 '$')
Commenter la réponse de RPGamer
Messages postés
10
Date d'inscription
vendredi 6 mai 2005
Dernière intervention
25 juillet 2008
0
Merci
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
Commenter la réponse de RPGamer
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Dernière intervention
30 juillet 2012
33
0
Merci
clique sur reponse acceptee stp
Commenter la réponse de coucou747

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.