Remplacer texte par image avec str_replace

Remplacer texte par image avec str_replace - PHP - Programmation

Marsh Posté le 08-09-2009 à 02:33:22    

Bonjour,
 
J'ai un petit bout de code qui fonctionnait a merveille permettant de remplacer des mots par des images,
 
Mais maintenant j'ai un conflit avec deux mots différents mais ayant les premières lettres similaires ce qui créer un conflit.
 

Citation :

$t = str_replace('tis' , '<img src="images/=tis.gif"  alt="" class="" />', $t) ;
$t = str_replace('tissou' , '<img src="images/=tissou.gif"  alt="" class="" />', $t) ;


 
le tis étant présent dans les 2 lignes ça pose problème pour le remplacement
 
comment contourner ça sans changer les mots a remplacer? merci

Reply

Marsh Posté le 08-09-2009 à 02:33:22   

Reply

Marsh Posté le 08-09-2009 à 05:09:25    

en remplacant d'abord les mots les plus longs puis en finissant par remplacer les mots les plus courts


---------------
Blablaté par Harko
Reply

Marsh Posté le 08-09-2009 à 12:04:54    

utilise la fonction strtr() qui ne fera pas deux fois le remplacement

Reply

Marsh Posté le 08-09-2009 à 13:11:26    

pour info, str_replace est capable de travailler avec des tableaux de remplacements

Code :
  1. $t = str_replace(array("tissou", "tis" ), array('<img src="images/=tissou.gif"  alt="" class="" />', '<img src="images/=tis.gif"  alt="" class="" />'), $t);


Je ne sais pas si l'ordre des chaînes à remplacer à une importance : à tester.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-09-2009 à 13:28:13    

l'ordre des chaines à une importance car si j'ai une phrase du type :  
 
tissou fais des tis avec ses tis
 
et que je veux remplacer "tis" par "foo", et "tissou" par "bar"
si on remplace d'abord les "tis" en premier on aura  

Citation :


foosou fais des foo avec ses foo


et donc au coup suivant tu pourras pas remplacer "tissou" par "bar"


---------------
Blablaté par Harko
Reply

Marsh Posté le 08-09-2009 à 16:41:38    

gatsu35 a écrit :

en remplacant d'abord les mots les plus longs puis en finissant par remplacer les mots les plus courts

 

non ca marchera pas

 

si tu fais

 

$t = str_replace('tissou' , '<img src="images/=tissou.gif"  alt="" class="" />', $t) ;
$t = str_replace('tis' , '<img src="images/=tis.gif"  alt="" class="" />', $t) ;

 

avec un texte genre $t = "tis tissou";

 

tu va avoir

 

1 : tis <img src="images/=tissou.gif"  alt="" class="" />
2:<img src="images/=tis.gif"  alt="" class="" />  <img src="images/=<img src="images/=tis.gif"  alt="" class="" />sou.gif"  alt="" class="" />

  

le mieux ca serai a coup de regexp, mais y'a surment une autre vision a avoir sur ton probleme


Message édité par stealth35 le 08-09-2009 à 16:42:57
Reply

Marsh Posté le 08-09-2009 à 16:47:40    

gatsu35 a écrit :

l'ordre des chaines à une importance car si j'ai une phrase du type :  
 
tissou fais des tis avec ses tis
 
et que je veux remplacer "tis" par "foo", et "tissou" par "bar"
si on remplace d'abord les "tis" en premier on aura  

Citation :


foosou fais des foo avec ses foo


et donc au coup suivant tu pourras pas remplacer "tissou" par "bar"


 
bah non plus parce que y'a pu de tissou apres, faudrais
 
1 tissou fais des foo avec ses foo
2 bar fais des foo avec ses foo

Reply

Marsh Posté le 08-09-2009 à 16:57:54    

stealth35 a écrit :


 
bah non plus parce que y'a pu de tissou apres, faudrais
 
1 tissou fais des foo avec ses foo
2 bar fais des foo avec ses foo


relis ce que tu as écris
 le but est d'obtenir ta phrase numéro 2
 
et donc si on commence le remplacement des mots par tis, on pourri letruc


---------------
Blablaté par Harko
Reply

Marsh Posté le 08-09-2009 à 17:15:04    

sauf que lui il garde tissou et tiss dans son texte, ton exemple marche uniquement si ca chaine est differente

Reply

Marsh Posté le 08-09-2009 à 17:40:46    

ah oué, fuck :(
bon à coup de regexp dans ce cas :(


---------------
Blablaté par Harko
Reply

Marsh Posté le 08-09-2009 à 17:40:46   

Reply

Marsh Posté le 08-09-2009 à 17:41:45    

<?php
 $t = 'tissou fais des tis avec ses tis';
 
 $rep = array('/(tis)\b/', '/(tissou)\b/');
 $new = '<img src="${0}.gif" alt="" class="">';
 
 echo preg_replace($rep, $new, $t);
?>


 
plus cas completer  $rep avec ce que tu veux


Message édité par stealth35 le 08-09-2009 à 17:41:57
Reply

Marsh Posté le 08-09-2009 à 17:49:18    

Merci a tous pour vos réponses.
 
J'ai testé la ligné de rufo et ça fonctionne bien!!
 
 
thanks!
 

Reply

Marsh Posté le 08-09-2009 à 17:55:01    

marche pas chez moi, le  tissou n'est pas pris en compte, si tu change l'ordre de tis et de tissou t'arrive au meme probleme


Message édité par stealth35 le 08-09-2009 à 17:56:21
Reply

Marsh Posté le 08-09-2009 à 18:01:19    

d'où ma question sur l'ordre pour str_replace quand on utilise les tableaux...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-09-2009 à 18:05:25    

rufo a écrit :

d'où ma question sur l'ordre pour str_replace quand on utilise les tableaux...


 
bah ouai, c'est pour ca je comprend pas pourquoi il dit que ca marche  :pt1cable:

Reply

Sujets relatifs:

Leave a Replay

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