remplacement systématique avec pre_replace

olga
Invité n'ayant pas de compte PHPfrance

12 mai 2005, 12:35

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 mai 2005, 12:38

Essaye ça :
$str_chaine = str_replace($motcle, "<span style='background-color:#DEDEDE'>$motcle</span>", $str_chaine);
Modifié en dernier par zeus le 12 mai 2005, 16:39, modifié 1 fois.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 22 Messages

12 mai 2005, 16:31

ça me met ça comme erreur...
Undefined variable: str_chaine in .../php] #-o

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 mai 2005, 16:38

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);
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 22 Messages

13 mai 2005, 11:03

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 ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 mai 2005, 11:08

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 22 Messages

13 mai 2005, 11:13

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 :?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 mai 2005, 11:41

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() ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 357 Messages

13 mai 2005, 11:53

< HORS SUJET>
C'est dure la vie o taf Zeus :twisted:
</ HORS SUJET>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 mai 2005, 12:02

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:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 357 Messages

13 mai 2005, 12:21

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:

ViPHP
ViPHP | 1380 Messages

13 mai 2005, 12:26

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
ripat

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 mai 2005, 13:17

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/
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 mai 2005, 13:33

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:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 22 Messages

13 mai 2005, 16:56

bon eh bien merci à tous pour votre aide !

(je bosse aussi lundi :( )