使用具有BBCode的htmlentities

时间:2009-06-23 01:35:04

标签: php

我想要实现的是使用BBCode的合理方法,但是通过htmlentities()解析所有其他数据。我认为这应该是可能的,我正在考虑围绕[]符号爆炸的思路,但我认为可能有更好的方法。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

htmlentities()无法解析。相反,它编码数据,因此可以安全地显示在HTML文档中。

您的代码如下所示:

  1. 解析BB码(通过某种机制);不要进行转义,只需将输入文本解析为标签!
  2. 解析器步骤的输出将是一些树结构,由表示块标记的节点和表示纯文本的节点(标记之间的文本)组成。
  3. 将树渲染为输出格式(HTML)。此时,您使用htmlentities在数据结构中转义纯文本
  4. 您的渲染功能将是递归的。一些指定关系的伪函数:

    render( x : plain text ) = htmlentities(x)
    
    render( x : bold tag )   = "<b>" . render( get_contents_of ( x )) . "</b>"
    
    render( x : quote tag )  = "<blockquote>" . 
                               render( get_contents_of( x )) .
                               "</blockquote>"
    
    ...
    
    render( x : anything else) = "<b>Invalid tag!</b>"
    

    所以你看,htmlentities只有在你将输出呈现给HTML时才会发挥作用,所以如果你的纯文本应该包含特殊字符,例如&lt;和&gt;。如果您要渲染为纯文本,则根本不会使用函数调用。