代码之家  ›  专栏  ›  技术社区  ›  Roman

BBCode到HTML转换规则

  •  0
  • Roman  · 技术社区  · 16 年前

    背景

    C# 它将BBCode转换为HTML。目前它只支持 [b] , [i] [u] 标签。我知道BBCode总是被认为是有效的,不管用户键入了什么。我找不到如何将BBCode转换为HTML的严格规范

    1. 是否存在标准的“BBCode到HTML”规范?
    2. 我该怎么处理 "[b][b][/b][/b]" ? 目前,解析器的产量 "<b>[b][/b]</b>" .
    3. 我该怎么处理 "[b][i][u]zzz[/b][/i][/u]" "<b><i><u>zzz</u></i></b>" 这种情况下的输出,但我想知道它是“太聪明”的方法,还是不是?

    更多细节

    我发现了一些现成的BBCode解析器实现,但它们对我来说太重/复杂了,更糟糕的是,它们使用了大量正则表达式,并没有产生我所期望的标记。理想情况下,我希望在输出端接收XHTML。为了推断“BBCode到HTML”转换规则,我使用了这个在线解析器: http://www.bbcode.org/playground.php . 它生成的HTML在我看来是直观正确的。我唯一不喜欢它的是它不产生XHTML。例如 "[b][i]zzz[/b][/i]" 转化为 "<b><i>zzz</b></i>" (注意关闭标签顺序)。FireBug当然会将此显示为 "<b><i>zzz</i></b><i></i>" . 据我所知,浏览器会修复此类错误的结束标记,但我对此表示怀疑:

    1. 大概 "[b][i]zzz[/b]ccc[/i]" 必须理解为 "<b>[i]zzz</b>ccc[/i]" -在逻辑上查找此类不正确的格式,但与流行的代码输出冲突( *zzz****ccc*,而不是**[i]ZZCCC[/i] )

    谢谢

    3 回复  |  直到 16 年前
        1
  •  2
  •   Valentin Flachsel    16 年前

    关于你的第一个问题,我不认为依靠浏览器来纠正错误 任何 无论项目的范围如何,这种错误都是一个好主意(好吧,也许除了在浏览器本身上进行bug测试时)。一些浏览器可能在这方面做得很棒,而另一些浏览器可能会失败得很惨。确保输出语法正确(或至少尽可能正确)的最佳方法是首先将带有正确语法的输出发送到浏览器。

    关于第二个问题,由于您试图将正确的BBCode转换为正确的HTML,如果您的输入是 [b][i]zzz[/b]ccc[/i] 它的 HTML等价物是 <i><b>zzz</b>ccc</i> 而不是 <b>[i]zzz</b>ccc[/i] . 这就是事情变得复杂的地方,因为你不再只是写一个转换器,而是一个语法检查/纠正器。我已经用PHP为一种相当奇怪的游戏引擎脚本语言编写了一个类似的脚本,但是逻辑可以很容易地应用到您的案例中。基本上,我为每个开始标记设置了一个标志,并检查结束标记是否位于正确的位置。当然,这提供了有限的功能,但对于我所需要的,它做到了。如果您需要更高级的搜索模式,我认为您需要使用正则表达式。

        2
  •  0
  •   Chris    16 年前

    如果您只打算实现B、I和U,它们不是非常重要的标记,那么为什么不为这些标记中的每一个设置一个计数器,每次打开时+1,每次关闭时-1。

        3
  •  0
  •   rlkw1024    12 年前

    关于无效用户提交的标记,您至少有三个选项:

    1. 逐字打印,即不要将其转换为HTML
    2. 尝试修复它。

    至于如何解析BBCode,我强烈建议不要使用regex。BBCode实际上是一种相当复杂的语言。最重要的是,它支持标签嵌套。正则表达式不能处理任意嵌套。这是正则表达式的基本限制之一。这使得它成为解析HTML和BBCode等语言的错误选择。

    对于我自己的项目, rbbcode

    推荐文章