2011-09-18 93 views
-1

我有以下代码爆炸和str_replace函数

while (strpos($r, "[url]") !== FALSE){ 
    $link = explode("[url]", $r); 
    $final_link = explode("[/url]", $link[0]); 

    $thelink = $final_link[0]; 
} 
$r = str_replace("[url]","[url=$thelink]",$r); 

如果$r = [url]www.google.com[/url],我要变成[url=www.google.com]www.google.com[/url]

此代码这似乎并没有那样做。我错过了什么吗? 给我一个500错误!

感谢

+1

你能解释一下你的代码吗? –

+0

字符串到达​​,例如问题中发布的$ r = I。我需要把它变成我写的东西。该代码正试图将其分解并以替代格式构建它。 – sark9012

+0

如果我正确理解你的代码,当你爆炸时,你正在有效地清除[url],所以没有什么可以替换的。您是否打印了$链接以查看它的外观? –

回答

1
preg_replace('~\[url\](.*?)\[/url\]~', '[url=$1]$1[/url]', $string); 
0

在这里你去:

$r = '[url]www.google.com[/url]'; 
if (strpos($r, "[url]") !== FALSE){ 
    $link = explode("[url]", $r); 
    $final_link = explode("[/url]", $link[1]); 

    $thelink = $final_link[0]; 
    $r = str_replace("[url]","[url=$thelink]",$r); 
} 

var_dump($r); 

的变化是:改变了whileif因为似乎没有成为它是一个while的理由。还将$link[0]更改为$link[1]

0

尽管这并不直接回答你的(不太好!)的问题,我会建议使用正则表达式来代替:

$outputText = preg_replace('/\[url\](.*?)\[\/url\]/i', '[url=$1]$1[/url]', $inputText); 
0
$r = preg_replace('#\[url\](.*?)\[/url\]#', '[url=$1]$1[/url]', $r); 

试试这个正则表达式来代替。

+0

'(。*)?'应该是'(。*?)' – nickf

+0

@nick谢谢你的发现。我修好了它。 – FtDRbwLXw6

0
$r = "[url]www.google.com[/url]"; 
$sub="=".substr($r,5,-6); 
echo $url=substr_replace($r,$sub,4,0);