4

我想要一个将 vBulletin 中的 BB 代码解析为标准 HTML 标记的函数。

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

特别是我遇到的麻烦是匹配[quote=My Name]。名称“我的名字”不包含任何内容,并且可以包含空格。

4

5 回答 5

1

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

该项目页面还包含指向类似工作的链接;即使您不喜欢其中之一,也可能有用。

于 2010-06-02T00:46:25.367 回答
1

(简介:使用 vBulletin 开发 5 年)

与大多数正则表达式或嵌入式库相比,vBulletin 的解析器非常复杂(可能是不必要的?)。老实说,我只是挖掘它,并拿出你能做的,因为他们倾向于做一些不同的事情。如果您有一个完美工作的解析器,而无需查看它们如何自己实际生成/解析它,我会感到惊讶。

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

希望这可以帮助。

于 2010-09-25T20:07:43.133 回答
1

嗯,除了PEAR 包PECL 扩展之外,您还有一个名为Zend_Markup的 Zend 框架包,它非常易于使用(ZF 是松散耦合的,因此您可以选择只使用该组件)。PHP Classes也有很多类。

于 2010-06-02T00:34:07.883 回答
0

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

于 2010-06-02T01:49:08.913 回答
0

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

$text = "[quote=我的名字]某事。
[b]布拉[b]
blabla.[/quote]";
$search = "/\[quote=(?>([a-z0-9]*))\](.*)\[/quote\]/is";
$replace = "来自 <i>$1</i>: <q>$2</q>";
$return_text = preg_replace($search, $replace, $text);

回声 nl2br($return_text);

/*
来自<i>我的名字</i>:<q>某事。
[b]布拉[b]
废话。</q>
*/

我之所以说最难,只是因为在那个“(。*)”上可能会发生灾难性的回溯,尤其是对于较长的文本,以及一些匹配项可能会从裂缝中溜走。因此,您可能想直接访问源代码以找到正确的正则表达式: http ://www.bbcode.org/implementations.php (请参阅:使用 PHP 的简单和复杂 BBCode用于正则表达式,phpBBCode用于源代码)。或者,您可以在此处复制和构建 Pear 的解析器源代码:http: //svn.php.net/viewvc/pear/packages/HTML_BBCodeParser

于 2010-06-02T03:54:37.053 回答