Surligner une expression recherchée dans une chaine de caractères

Surligner une expression recherchée dans une chaine de caractères - PHP - Programmation

Marsh Posté le 22-07-2004 à 01:44:11    

Je suis en train de faire un moteur de recherche pour mon site et à l'aide d'une requete sql je prend toutes les lignes de la table ou tel champ contient ou est égal au mot ou à l'expression entré par le visiteur. Ca marche très bien mais je souhaiterais (pour que ça soit plus classe et lisible) surligner ou mettre d'une autre couleur le mot ou l'expression recherchée à l'intérieur de toute la chaine de caractère du champ. Est ce que quelqu'un a une idée ? Peut être qu'il fautdrait utiliser la fonction stristr mais elle ne trouve que la première occurence de la chaine ou bien la fonction strpos mais elle ne trouve que la dernière position de l'occurence puis comment faire pour ensuite écrire l'occurence en une autre couleur juste en ayant sa position dans la chaine de toutes façons.
Merci pour votre aide

Reply

Marsh Posté le 22-07-2004 à 01:44:11   

Reply

Marsh Posté le 22-07-2004 à 02:09:42    

Utilise une fonction de remplacement avant l'affichage (en supposant que tu affiches les résultats en HTML) comme str_replace ou preg_replace.

Code :
  1. $cherche = 'cible';
  2. $string = 'cible est le mot recherché';
  3. echo str_replace($cherche,"<span class=\"underline\">$cherche</span>",$string);


 
va donner cible est le mot recherché. (enfin, avec la CSS idoine :D)
 
Utilise str_replace ou preg_replace suivant que tu veux retrouver les apparitions d'une chaine ou un mot seulement.

Reply

Marsh Posté le 22-07-2004 à 18:04:27    

naceroth a écrit :

Utilise une fonction de remplacement avant l'affichage (en supposant que tu affiches les résultats en HTML) comme str_replace ou preg_replace.

Code :
  1. $cherche = 'cible';
  2. $string = 'cible est le mot recherché';
  3. echo str_replace($cherche,"<span class=\"underline\">$cherche</span>",$string);


 
va donner cible est le mot recherché. (enfin, avec la CSS idoine :D)
 
Utilise str_replace ou preg_replace suivant que tu veux retrouver les apparitions d'une chaine ou un mot seulement.


 
Merci beaucoup ça marche impec, le seul détail c'est que str_replace est sensible à la casse :/ Chez trouvé sur un site la fonction str_ireplace qui est la version insensible à la casse de str_replace donc j'étais trop content mais elle ne marche pas! Ca m'affiche "call undefinided function str_ireplace" etc.. Donc jsuis deg :/ Mon hébergeur est multimania, est ce possible que leur serveur php ne reconnaisse pas toutes les fonctions ?

Reply

Marsh Posté le 22-07-2004 à 18:07:10    

str_ireplace est dispo en php5, multimania ne doit pas y être encore.
Il faudra attendre


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 22-07-2004 à 18:08:37    

Avec une expression régulière, ca passe non?

Reply

Marsh Posté le 22-07-2004 à 18:09:33    

harrysauce a écrit :

Avec une expression régulière, ca passe non?


 
avec str_replace ça marche tres bien oui

Reply

Marsh Posté le 22-07-2004 à 18:10:11    

T509 a écrit :

str_ireplace est dispo en php5, multimania ne doit pas y être encore.
Il faudra attendre


 
Mince sont nuls multimania  :o

Reply

Marsh Posté le 22-07-2004 à 18:10:54    

Clapsou a écrit :

avec str_replace ça marche tres bien oui

str_replace est sensible à la casse, et str_ireplace n'est pas dispo chez ton hébergeur, je te proposais donc de passer par les epxressions régulière (fonction eregi, par exemple)..... :sarcastic:

Reply

Marsh Posté le 22-07-2004 à 18:12:07    

harrysauce a écrit :

str_replace est sensible à la casse, et str_ireplace n'est pas dispo chez ton hébergeur, je te proposais donc de passer par les epxressions régulière (fonction eregi, par exemple)..... :sarcastic:


 
Ah dsl, quelle différence entre une expression normal ou bien régulière ?

Reply

Marsh Posté le 22-07-2004 à 18:19:07    

Reply

Marsh Posté le 22-07-2004 à 18:19:07   

Reply

Marsh Posté le 22-07-2004 à 19:19:23    


 
ereg_ireplace ne marche pas non plus sur multimania et ereg_replace n'est pas moins sensible à la casse de str_replace :(


Message édité par Clapsou le 22-07-2004 à 19:20:22
Reply

Marsh Posté le 22-07-2004 à 19:42:35    

Si, avec les regex ça fonctionne (j'y avais pas pensé à la casse :)) :
 

Code :
  1. $cherche = 'cible';
  2. $string = 'Cible est le mot recherché';
  3. echo preg_replace("/($cherche)/i","<span class=\"underline\">$1</span>",$string);


donne bien Cible est le mot recherché.
 
Et je suis pas un pro en regex :D

Reply

Marsh Posté le 22-07-2004 à 20:29:50    

naceroth a écrit :

Si, avec les regex ça fonctionne (j'y avais pas pensé à la casse :)) :
 

Code :
  1. $cherche = 'cible';
  2. $string = 'Cible est le mot recherché';
  3. echo preg_replace("/($cherche)/i","<span class=\"underline\">$1</span>",$string);


donne bien Cible est le mot recherché.
 
Et je suis pas un pro en regex :D


 
Bravo tu es un chef!  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed