remplacer un mot, sauf s'il est dans une uri

remplacer un mot, sauf s'il est dans une uri - PHP - Programmation

Marsh Posté le 17-03-2006 à 16:37:53    

Bonjour,
 
je suis confronté à un problème que je n'arrive pas à résoudre.
 
je peux remplacer une occurence d'un mot par un lien avec str_replace() sans problème et mon objectif est de le remplacer par un lien vers sa définition si elle existe dans une base de donnée.
 
Par contre, le remplacement se fait quel que soit l'emplacement du mot et donc ça casse mes liens et email...
 
Connaitriez vous le moyen de :
 
1/filtrer le contenu $texte pour en sortir tous les liens en les mettant dans un tableau.
2/réintroduire le contenu de ce tableau dans le $texte à l'endroit où il était précédemment après que j'ai remplacé les occurences restantes du mot par mes liens.
 
Merci pour vos idées!

Reply

Marsh Posté le 17-03-2006 à 16:37:53   

Reply

Marsh Posté le 17-03-2006 à 16:47:16    

Bonjour,
 
En toute logique, si c'est un mot que tu veux remplacer, alors il suffit de modifier la recherche du str_replace pour rechercher un mot avec un espace devant ou derrière
 
un truc dans ce genre :  

Code :
  1. $texte = str_replace(' mot ',' <a href="">mot</a>',$texte);


 
Ensuite, il doit falloir adapter en fonction de la position du mot par rapport à la ponctuation
 
Pierre

Reply

Marsh Posté le 17-03-2006 à 17:09:14    

En fait, pas de problème : je sais remplacer un mot par une url hein :) (j'ai lu les faq des divers sites avant de demander quand même  ;) ...)
 
Ma question c'est comment ne pas remplacer le mot s'il est dans une url :
 
mon texte avec le mot et le <a href="blabl.html" class="mona">mot</a>
 
je veux remplacer le premier mot mais pas celui dans l'url sinon j'ai :
 
mon texte avec le <a href="mot">mot</a> et le <a href="blabl.html" class="mona"><a href="mot">mot</a></a>
 
ce qui casse tout évidemment  :(  
 
Suis je plus clair?

Reply

Marsh Posté le 17-03-2006 à 17:11:38    

oui tu as été assez clair, mais c'est pour ca que j'ai rajouté des espaces autour. ( c'est une solution très rapide )
 
Ensuite pour faire plus compliqué mais plus propre, il faut une fois le mot trouvé vérifier qu'il ne se trouve pas une balise </a> dans la suite du texte mais sans rencontrer un <a
 

Code :
  1. $index = strpos($texte,'mot')
  2. if ($îndex !== FALSE ) {
  3. //on cherche si on trouve </a> mais sans rencontrer <a
  4. //A mon avis avec une regex ca doit pouvoir se faire mais là j'ai pas le temps
  5. //Si c'est pas un lien alors on applique le remplacement
  6. }


Message édité par Lord II le 17-03-2006 à 17:28:36
Reply

Marsh Posté le 20-03-2006 à 17:03:35    

Bon eh ben j'ai opté pour une regexp plutôt hein (oui je suis têtu):
 
$search= '@<a[^>]*?>.*?</a>@si';
/* je cree le motif que l'on va retirer : tout ce qui est entre <a...> et </a> */
 
$texte = preg_replace($search, $uris, $texte);
/* je sors les instances du motif et je les stocke dans $uris[] */
 
Mais probleme : j'ai l'impression que $uris ne s'incrémente pas au fur et à mesure...
 
je voulais stocker les chaines que je remplace dans un tableau pour les remettre au même endroit après traitement... :-\
 
une idée?

Reply

Sujets relatifs:

Leave a Replay

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