Erreur Unknown modifier '/' avec preg_replace

Erreur Unknown modifier '/' avec preg_replace - PHP - Programmation

Marsh Posté le 27-11-2008 à 15:22:15    

Bonjour,
lorsque j'exécute cette fonction:
$news = preg_replace("/\[url=".$liens."\]".$text_liens."\[/url\]/", "<a target='_blank' href='".$liens."'>".$text_liens."</a>", $news);
PHP me retourne cette erreur:
Warning: preg_replace(): Unknown modifier '/' in /var/www/bo/admincompta/BO/website/test_bibit_blacklist/news_insert_action.php on line 15
 
Je n'arrive pas à trouver pourquoi cette erreur apparait...
 
Merci

Reply

Marsh Posté le 27-11-2008 à 15:22:15   

Reply

Marsh Posté le 27-11-2008 à 15:36:24    

$news = preg_replace("/\[url=".$liens."\]".$text_liens."\[/url\]/", "<a target='_blank' href='".$liens."'>".$text_liens."</a>", $news);  
 
Le / de [/url] doit être backslashé

Reply

Marsh Posté le 27-11-2008 à 15:44:30    

yellu a écrit :

$news = preg_replace("/\[url=".$liens."\]".$text_liens."\[/url\]/", "<a target='_blank' href='".$liens."'>".$text_liens."</a>", $news);  
 
Le / de [/url] doit être backslashé


 
C'est à dire?  :??:

Reply

Marsh Posté le 27-11-2008 à 16:42:16    

Personne sait??

Reply

Marsh Posté le 27-11-2008 à 17:11:42    

BackSlasher c'est protéger un caractère spécial dans une chaine en lui collant un BackSlash aux fesses => \
 
Donc si on protège le mot [/url] dans le contexte d'une regexp ça donne \[\/url\] car [, ] et / sont des caractères spéciaux.

Reply

Marsh Posté le 27-11-2008 à 17:31:10    

Ma fonction avec l'ajout du backslashe:
$news = preg_replace("/\[url=".$liens."\]".$text_liens."\[\/url\]/", "<a target='_blank' href='".$liens."'>".$text_liens."</a>", $news);
me retourne cette erreur:

Warning: preg_replace(): Unknown modifier '/' in /var/www/bo/admincompta/BO/website/test_bibit_blacklist/news_insert_action.php on line 15

 
 :??:

Reply

Marsh Posté le 27-11-2008 à 17:37:49    

dans tes variables $liens et $text_liens il doit y avoir des choses à backslasher aussi donc met leur un addslashes, et encore ça suffira surement pas car ça backslashera pas les [] () ...
 
Pourquoi tu n'utilises pas les variables internes aux regexps avec les parenthèses capturantes \1, \2, etc, ça simplifierai le problème ?


Message édité par yellu le 27-11-2008 à 17:39:16
Reply

Marsh Posté le 27-11-2008 à 17:46:52    

A présent je n'ai plus de message d'erreur mais mon script boucle et le preg_replace de la variable $news ne s'effectue pas.
 
Voici mon code:

Code :
  1. $news = "dqofhdsi hijshf dfjhdsfoi hfdhqfdq hfkjlhkj dq coucou ça va bien?? hé oui c'est moi
  2. s ih hslkjhjl hdfgd sd gsdfgohfggffkjdkjCliquez icidkfjdkjkjd kdf jkf fkjdf kdj kdregarde ça ^^jfk djkdjfizutfisjkl kj h lusfkj khg";
  3. do{
  4.  if(preg_match("#\[url#", $news) == false)
  5.   break;
  6.  $text_liens = substr($news, strpos($news, "]" )+1, (strpos($news, "[/url]" )-2)-strpos($news, "]" )+1);
  7.  $liens = substr($news, strpos($news, "[url" )+5, (strpos($news, "]" )-10)-strpos($news, "[url" )+5);
  8.  $liens = preg_replace("/\//", "\/", $liens);
  9.  $news = preg_replace("/\[url=".$liens."\]".$text_liens."\[\/url\]/", "<a target='_blank' href='".$liens."'>".$text_liens."</a>", $news);
  10. }while(true);


Reply

Marsh Posté le 27-11-2008 à 18:19:47    

je verrais plutot un code de ce style :
 

Code :
  1. $news = "dqofhdsi hijshf dfjhdsfoi hfdhqfdq hfkjlhkj dq coucou ça va bien?? hé oui c'est moi
  2. s ih hslkjhjl hdfgd sd gsdfgohfggffkjdkjCliquez icidkfjdkjkjd kdf jkf fkjdf kdj kdregarde ça ^^jfk djkdjfizutfisjkl kj h lusfkj khg";
  3. $news = preg_replace('/\[url=(.+)\](.+)\[\/url\]/is', '<a target="_blank" href="\\1">\\2</a>', $news);


 
avec le premier (.+) qui pourrait être remplacé par une regexp plus complexe adaptés aux URLS, mais ça marche qd même avec (.+)


Message édité par yellu le 27-11-2008 à 18:20:28
Reply

Sujets relatifs:

Leave a Replay

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