2014-01-08 32 views
0
echo preg_replace("#\[map\](.+)\[\/map\]#e", '[link=maps.php/".$map_id[array_search("$1", $map_name)]."/$1/]$1[/link]', $text); 

是我的尝试。preg替换里面的方法

我想更换

[map]map_name[/map] 

[link]maps.php/id/map_name[/link] 

我有两个数组,$map_id$map_name。它们包含完全相同的项目和项目使用相同的密钥连接,例如:$map_id[123] ID是用于该地图的:$map_name[123]

因为它返回我的preg_replace不起作用:Failed evaluating code: [link=maps.php/".in_array("ksz_luminous", $map_name)."/ksz_luminous/]ksz_luminous[/link]

+0

也许[preg_replace_callback()](http://uk1.php.net/preg_replace_callback)? – putvande

+0

我建议你避免使用'e'标志。它会在当前PHP版本中触发不推荐使用的通知。 –

回答

1

你不应该使用e标志。假设我使用这个:

[map]",array())].shell_exec("evil command of evil").$map_id[array_search("[/map] 

或类似的东西。

不管怎样,试试这个:

echo preg_replace_callback("(\[map\](.+?)\[/map\])i", 
    function($m) use ($map_id,$map_name) { 
     return "[link=maps.php/" 
      .$map_id[array_search($m[1], $map_name)] 
      ."/".$m[1]."/]".$m[1]."[/link]"; 
    }, $text); 
+0

你会返回一个关于意外函数的错误,但这是要走的路。谢谢 – Nikola