我想要一个从vBulletin解析BB Code到标准HTML标记的函数。
不使用PEAR库或PECL扩展,因为我不想对PEAR大惊小怪,或者必须依赖于能够在此应用程序的每个实例上安装PECL扩展。目标是零依赖。如果我能找到PEAR扩展的源代码并修改它,那就好了,但我似乎无法做到。
特别是我遇到的问题是匹配[quote=My Name]
。 “我的名字”这个名字没有被任何东西包围,可以包含空格。
答案 0 :(得分:1)
好吧,除了PEAR package和PECL 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