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

RPGamer 10 Messages postés vendredi 6 mai 2005Date d'inscription 25 juillet 2008 Dernière intervention - 17 avril 2008 à 11:45 - Dernière réponse : coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention
- 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
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 18 avril 2008 à 18:10
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...

Merci coucou747 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 123 internautes ce mois-ci

Commenter la réponse de coucou747
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 17 avril 2008 à 13:16
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
RPGamer 10 Messages postés vendredi 6 mai 2005Date d'inscription 25 juillet 2008 Dernière intervention - 18 avril 2008 à 17:36
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
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 18 avril 2008 à 17:43
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
RPGamer 10 Messages postés vendredi 6 mai 2005Date d'inscription 25 juillet 2008 Dernière intervention - 18 avril 2008 à 17:55
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
RPGamer 10 Messages postés vendredi 6 mai 2005Date d'inscription 25 juillet 2008 Dernière intervention - 19 avril 2008 à 19:37
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
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 20 avril 2008 à 10:08
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.