Page 1 sur 1

remplacement systématique avec pre_replace

Posté : 12 mai 2005, 12:35
par olga
Bonjour,

je galère un peu (voire beaucoup) sur un petit détail de remplacement de chaine. Le problème a sûrement déjà été expliqué mais je n'ai pas trouvé de réponse concluante. Je m'en escuse par avance... :wink:


Voilà ce que j'aimerais qu'il se passe dans ma page...
j'ai un formulaire de recherche où je tape un mot clé. Je récupère la variable ($motcle), j'exécute ma requête SQL, tout s'affiche correctement. Jusque là, ça va.

En fait, je ne vois comment faire pour par exemple souligner chaque occurence du mot recherché (et donc de la chaine $motcle) dans ma page de résultats et faire en sorte que chaque fois qu'apparaît la chaine, elle soit soulignée.
en gros, remplacer
$chaine= "$motcle"
par
$chaine="<span style="background-color:#DEDEDE">$motcle</span"

et là, je galère... :cry:

merci pour votre aide.

olga

Posté : 12 mai 2005, 12:38
par zeus
Essaye ça :
$str_chaine = str_replace($motcle, "<span style='background-color:#DEDEDE'>$motcle</span>", $str_chaine);

Posté : 12 mai 2005, 16:31
par Olga
ça me met ça comme erreur...
Undefined variable: str_chaine in .../php] #-o

Posté : 12 mai 2005, 16:38
par zeus
Ce que j'appelle $str_chaine, c'est ce le texte dans lequel tu veux changer la couleur du mot clé !!!

Si tu as insérer cette ligne sans rien faire d'autre dans ton code et sans chercher à la comprendre, il y avait 99,9% de chance que ça ne marche pas !!!

Je veut bien t'aider mais il faut que tu t'aide aussi : ne te contente pas de recopier ce qu'on te donne, essaye de le comprendre et pose des questions. Comme ca, tu n'aura pas à revenir poser la même question !!!
$str_chaine = str_replace($motcle, "<span style='background-color:#DEDEDE'>$motcle</span>", $str_chaine);

Posté : 13 mai 2005, 11:03
par Olga
merci Zeux pour ton aide. Ca marche. :wink:

Par contre, ça reste sensible à la casse. la fonction str_ireplace n'étant dispo qu'avec PHP5, y a-t-il une alternative pour rendre str_replace insensible à la casse en PHP4 ?

Posté : 13 mai 2005, 11:08
par zeus
Oui, on forcant ton texte en minuscule par exemple.
$motcle = strtolower($motcle);
$str_chaine = strtolower($str_chaine);
$str_chaine = str_replace($motcle, "<span style='background-color:#DEDEDE'>$motcle</span>", $str_chaine);
Mais la chaine que tu vas obtenir seras elle aussi entierement en minuscule

Posté : 13 mai 2005, 11:13
par Olga
Oui, on forcant ton texte en minuscule par exemple.
$motcle = strtolower($motcle);
$str_chaine = strtolower($str_chaine);
$str_chaine = str_replace($motcle, "<span style='background-color:#DEDEDE'>$motcle</span>", $str_chaine);
Mais la chaine que tu vas obtenir seras elle aussi entierement en minuscule
J'ai fait exactement ça avec strtolower(), mais mes chaînes ont des majuscules et doivent les garder :?

Posté : 13 mai 2005, 11:41
par zeus
Je te donne l'algo et je te laisse chercher les fonctions PHP correspondante parce que mon boss me presse un peu aujourd'hui !!!


chaine = minuscule(chaine)
motcle = minuscule(mocle)
//cherche la position de la 1ere lettre de motcle dans chaine
//avec les chaines de départ, remplace le mot de longeur (taille de motcle) par motcle avec les balises HTML

renseigne toi sur subStr(), stristr(), strPos() ...

Posté : 13 mai 2005, 11:53
par seayoung
< HORS SUJET>
C'est dure la vie o taf Zeus :twisted:
</ HORS SUJET>

Posté : 13 mai 2005, 12:02
par zeus
C'est surtout que on me demande de faire un Cahier des charges après le dev et qu'il doit être prêt pour le 18 !!!

heureusement qu'on travaille lundi !!! :cry: :cry:

Posté : 13 mai 2005, 12:21
par seayoung
c klr ca laisse pas bcp de tps (enfin ca dp du cahier)
et pour t enfoncer un pe moi je travaille pas lundi :lol: :lol: :lol:

Posté : 13 mai 2005, 12:26
par Ripat
Allez Zeus, toi qui aime les regex:
$txt = preg_replace('#\b'.$motcle.'\b#i', "<span style='background-color:#DEDEDE'>$0</span>", $txt);
Dans ce cas, elle seront sans doute plus rapides que les manipulation de chaînes. Autre avantage: l'assertion \b qui permet d'isoler $motcle comme mot (éventuellement suivit d'une ponctuation)

Exemple ici

Posté : 13 mai 2005, 13:17
par zeus
Merci Ripat !!!! :agenouille:

J'avais pas le temps de voir si il fallait que j'explique ce qu'est qu'une ER et a trouver la bonne !!!!

mici mici mici mici mici !!!!!!! :pouce: :pouce: \:D/

Posté : 13 mai 2005, 13:33
par zeus
c klr ca laisse pas bcp de tps (enfin ca dp du cahier)
et pour t enfoncer un pe moi je travaille pas lundi
Heureusement le CDC est pas trop important !!!!

Mais il faut pas que je traîne trop !!! C'est pour ça que mon boss me pousse un peu !!!!

Il y aurait pas eu ce CDC, j'aurais peut être hésité à venir !!! Mais ca résoud la question !!! Et puis en tant que stagaire, ca fait pas de jouer l'absenteisme !!! :lol:

Posté : 13 mai 2005, 16:56
par Olga
bon eh bien merci à tous pour votre aide !

(je bosse aussi lundi :( )