【问题标题】:Parse vBulletin's BB Code in PHP用 PHP 解析 vBulletin 的 BB 代码
【发布时间】:2010-06-02 00:08:22
【问题描述】:

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

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

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

【问题讨论】:

  • “不使用 PEAR 库或 PECL 扩展”是什么意思?这当然是最明显的答案,为什么不呢?
  • 因为我不想对 PEAR 大惊小怪,也不想依赖能够在此应用程序的每个实例上安装 PECL 扩展。

标签: php parsing bbcode vbulletin


【解决方案1】:

嗯,除了PEAR packagePECL extension,您还有一个名为Zend_Markup 的 Zend 框架包,它非常易于使用(ZF 是松散耦合的,因此您可以选择只使用该组件) . PHP Classes也有不少课程。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      希望这会有所帮助。

      【讨论】:

      • 我无法访问 vBulletin 解析器,不过我正在处理论坛中的 BBCode。
      【解决方案4】:

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

      【讨论】:

      【解决方案5】:

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

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

      我说最难说只是因为“(.*)”有可能发生灾难性的回溯,特别是对于较长的文本,以及一些匹配项从裂缝中溜走的可能性。因此,您可能想直接到源代码中找到正确的正则表达式:http://www.bbcode.org/implementations.php(请参阅:Simple and Complex BBCode with PHP for regex,phpBBCode for sourcecode) .或者,您可以在此处复制和构建 Pear 的解析器源代码:http://svn.php.net/viewvc/pear/packages/HTML_BBCodeParser

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-25
        • 1970-01-01
        相关资源
        最近更新 更多