【发布时间】:2011-08-17 14:51:49
【问题描述】:
当前我正在创建一个 bbCodes 函数,以将所有 bbCodes 替换为文本中相应的 HTML 代码。我的代码是这样工作的:
public function bbCodes($text) {
global $bb_codes;
$text = preg_replace(array_keys($bb_codes), array_values($bb_codes), $text);
return $text;
}
$bb_codes 如下所示:
$bb_codes = array(
"/\[b\](.*)\[\/b\]/is" => "<b>$1</b>",
"/\[u\](.*)\[\/u\]/" => "<u>$1</u>",
"/\[i\](.*)\[\/u\]/" => "<i>$1</i>",
"/\[d\](.*)\[\/d\]/" => "<del>$1</del>",
"/\[url=(.*)\](.*)\[\/url\]/" => "<a href='$1'>$2</a>"
);
每个bbcode只使用一次时有效,例如:
[b]this text is bold[/b]
[i]this text is italic[/i]
etc..
但是一旦我多次使用一个 bbcode 标签,它就会变得一团糟:
[b]this text is bold[/b]
[i]this text is italic[/i]
[b]this text is bold too[/b]
它将看到第一个 [b] 标记并寻找另一个 [/b] 标记,但它使用最后一个而不是遇到的第一个(在上面的示例中,所有文本都将是粗体,第一个 [b ] 和最后一个 [/b] 将被替换)。有谁知道我做错了什么以及如何解决这个问题?
提前致谢!
干杯。
【问题讨论】:
标签: php regex preg-replace bbcode