[ PHP ] str_replace avancé dans un $texte

str_replace avancé dans un $texte [ PHP ] - PHP - Programmation

Marsh Posté le 24-04-2008 à 01:32:34    

Bonsoir, j'ai un client, qui me demande de lui appliquer un filtre pour un champs de texte. ( variable $texte ).
dans cette variable est stocké le texte et les images en html, et le chargement ce fait depuis une bdd sql.
 
Par exemple a chaque fois que le mot poulet dans un article est affiché, que le mot soit remplacer par une url, et pour en gras.
C'est assez simple a faire, mais lorsque que j'utilise un :
 

Code :
  1. $texte = str_replace("poulet","<a href=\"http://www.poulet.com/fr/\" target=_blank><b>poulet</b></a>", $texte);


 
Le mot poulet est effectivement bien remplacer par le liens avec poulet en gras, mais il y a un bug :
 
Si dans l'article une image comporte le mot poulet, ou meme un lien, de ce fait le mot est aussi remplacer, et du coup l'image n'apparait plus, pareil pour le lien.
Il serait possible de detecter si le mot a remplacer n'est pas deja dans un lien ou une image, pour eviter le bug ?
 
Merci d'avance


Message édité par _Rit0n_ le 24-04-2008 à 01:33:04
Reply

Marsh Posté le 24-04-2008 à 01:32:34   

Reply

Marsh Posté le 24-04-2008 à 08:18:53    

preg_replace('/\b(?<!=["\'])(?<!\/)poulet\b/', ...)
 
Avec ça il ne remplacera que les mots "poulet" (pas "poulets" ni "lebeaupoulet" ) qui ne sont pas précédés d'un slash (liens genre monbeausite.com/poulet.jpg), ou d'un =" ou =' (genre pour une image avec title ou autre). Après, on peut encore l'adapter au besoin...


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-04-2008 à 05:34:16    

donc cela nous donne un  
 

Code :
  1. preg_replace('/\b(?<!=["\'])(?<!\/)Trackmania\b/', "<a href=\"http://www.trackmania.com/fr/\" target=_blank><b>Trackmania</b></a>", $texte) ;


 
ca marche pas, je viens faire des test avec des preg replace, a mon avis ca doit etre une erreur de ' pour le remplaceur.
 
je vais continuer les test, merci  :hello:


---------------
Site web : http://nobock.fr
Reply

Marsh Posté le 25-04-2008 à 08:08:38    

Code :
  1. $texte = 'Trackmania blabla Trackmania blablaTrackmaniablabla Trackmania';
  2. echo preg_replace('/\b(?<!=["\'])(?<!\/)Trackmania\b/', "<a href=\"http://www.trackmania.com/fr/\" target=_blank><b>Trackmania</b></a>", $texte);


 
me renvoit

Code :
  1. <a href="http://www.trackmania.com/fr/" target=_blank><b>Trackmania</b></a> blabla <a href="http://www.trackmania.com/fr/" target=_blank>
  2. <b>Trackmania</b></a> blablaTrackmaniablabla <a href="http://www.trackmania.com/fr/" target=_blank><b>Trackmania</b></a>


 
Ça me paraît bon. Où est le problème ?


Message édité par sielfried le 25-04-2008 à 08:08:58

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 25-04-2008 à 08:47:55    

Oui, il est vrai qu'avec l'heure avancer, j'avait oublier ca :
 

Code :
  1. $texte = preg_replace


 
Un grand merci !


---------------
Site web : http://nobock.fr
Reply

Sujets relatifs:

Leave a Replay

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