用PHP解析vBulletin的BB代码

时间:2010-06-02 00:08:22

标签: php parsing bbcode vbulletin

我想要一个从vBulletin解析BB Code到标准HTML标记的函数。

不使用PEAR库或PECL扩展,因为我不想对PEAR大惊小怪,或者必须依赖于能够在此应用程序的每个实例上安装PECL扩展。目标是零依赖。如果我能找到PEAR扩展的源代码并修改它,那就好了,但我似乎无法做到。

特别是我遇到的问题是匹配[quote=My Name]。 “我的名字”这个名字没有被任何东西包围,可以包含空格。

5 个答案:

答案 0 :(得分:1)

好吧,除了PEAR packagePECL extension之外,你还有一个名为Zend_Markup的Zend Framework Package,它非常易于使用(ZF松散耦合,所以你可以选择仅使用该组件)。 PHP Classes还有很多课程。

答案 1 :(得分:1)

一种方法是使用http://www.christian-seiler.de/projekte/php/bbcode/index_en.html

项目页面还包含类似工作的链接;即使你不喜欢那个,其中一个也可能有用。

答案 2 :(得分:1)

(简介:用vBulletin开发5年)

与大多数正则表达式相比,vBulletin的解析器相当复杂(可能是不必要的?)或者是drop-in-libraries。老实说,我只是深入挖掘它,然后拿出你能做的,因为他们倾向于做一些不同的事情。如果你有一个完美的解析器而不必看到它们自己如何实际生成/解析它,我会感到惊讶。

如果它是旧数据,您可能只想编写自己的数据,但如果它是新旧数据,为什么不将它缓存在vBulletin端并使用它们生成的内容?或者直接使用vB_BbCode_Parser类......

希望这有帮助。

答案 3 :(得分:0)

我建议您调整PEAR扩展名。它没有依赖于其他PEAR库,因此它应该相当简单。

答案 4 :(得分:0)

最难的方法之一是使用正则表达式:

$text = "[quote=my name]something.
[b]bla[b]
blabla.[/quote]";
$search = "/\[quote=(?>([a-z0-9]*))\](.*)\[/quote\]/is";
$replace = "From <i>$1</i>: <q>$2</q>";
$return_text = preg_replace($search, $replace, $text);

echo nl2br($return_text);

/*
From <i>my name</i>: <q>something.
[b]bla[b]
blabla.</q>
*/

我说最难的只是因为'(。*)'的灾难性回溯的机会,特别是文字较长,并且有些比赛可能会从裂缝中滑落。所以,你可能想直接找到正确的正则表达式:http://www.bbcode.org/implementations.php(参见:简单和复杂的BBCode,PHP 表示正则表达式, phpBBCode 表示源代码)。或者,您可以在此复制和构建Pear的解析器源代码:http://svn.php.net/viewvc/pear/packages/HTML_BBCodeParser