代码之家  ›  专栏  ›  技术社区  ›  Josh K

用PHP解析vBulletin的BB代码

  •  4
  • Josh K  · 技术社区  · 15 年前

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

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

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

    5 回复  |  直到 15 年前
        1
  •  1
  •   mqchen    15 年前

    除了 PEAR package 还有 PECL extension 还有一个Zend框架包,名为 Zend_Markup 这非常容易使用(ZF是松散耦合的,所以您可以选择只使用该组件)。这里也有相当多的课程 PHP Classes .

        2
  •  1
  •   dgw CyberDem0n    15 年前

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

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

        3
  •  1
  •   Adrian Schneider    14 年前

    (简介:用vBulletin开发5年)

    vBulletin的解析器相当复杂(可能是不必要的?)与大多数正则表达式或drop-in库相比。老实说,我只是想把它翻个底朝天,尽你所能,因为他们做事往往有点不同。如果你有一个完美工作的解析器,而不必看它们自己是如何生成/解析的,我会感到惊讶。

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

    希望这有帮助。

        4
  •  0
  •   Artefacto    15 年前

    我建议你调整一下梨子的延伸部分。它不依赖于其他PEAR库,因此应该相当简单。

        5
  •  0
  •   bob-the-destroyer    15 年前

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

    $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 (见: 简单而复杂的PHP代码 对于regex, phpBBCode 用于源代码)。或者,您可以在此处复制并构建Pear的解析器源代码: http://svn.php.net/viewvc/pear/packages/HTML_BBCodeParser