下面的代码只会使用数组中的第一行(使文本变为粗体)。
function bbcode($string) {
$codes = Array(
'/\[b\](.+?)\[\/b\]/' => '<b>\1</b>',
'/\[i\](.+?)\[\/i\]/' => '<i>\1</i>',
'/\[u\](.+?)\[\/u\]/' => '<u>\1</u>',
'/\[s\](.+?)\[\/s\]/' => '<s>\1</s>',
'/\[url=(.+?)\](.+?)\[\/url\]/' => '<a href="\1">\2</a>',
'/\[image=(.+?)\]/' => '<div class="centered"><img src="\1" alt=""></div>'
);
while($replace = current($codes)) {
$bbcode = preg_replace(key($codes), $replace, $string);
next($codes);
return stripslashes(nl2br($bbcode));
}
}
echo bbcode('[b]This text[/b] will be bold and also [b]this text[/b]. But when I use some other BBCodes, it will [u]not[/u] work as planned. Here's a [url=http://google.com/]link[/url] too which will not be replaced as planned.');
输出:此文字将为粗体,此文字。但是当我使用其他bbcode时,[u]not[/u]
将按计划工作。这里也是[url=http://google.com/]link[/url]
,不会按计划更换。
我怎样才能让我的代码在数组中搜索正确的BBCode并用密钥替换它?
答案 0 :(得分:0)
preg_replace也接受数组以及模式和替换
使用替换部分中的符号$n
代替为模式保留的\n
。
这是我要做的:
function bbcode($string) {
$codes = Array(
'/\[b\](.+?)\[\/b\]/' => '<b>$1</b>',
'/\[i\](.+?)\[\/i\]/' => '<i>$1</i>',
'/\[u\](.+?)\[\/u\]/' => '<u>$1</u>',
'/\[s\](.+?)\[\/s\]/' => '<s>$1</s>',
'/\[url=(.+?)\](.+?)\[\/url\]/' => '<a href="$1">$2</a>',
'/\[image=(.+?)\]/' => '<div class="centered"><img src="$1" alt=""></div>'
);
$bbcode = preg_replace(array_keys($codes), array_values($codes), $string);
return stripslashes(nl2br($bbcode));
}