有选择地编码 HTML,如何


Selectively encoding HTML, how?

请允许我解释我的问题之前和之后...

我在网络社区上有一个评论系统。用户可以在文本区域中键入所需的任何内容,包括特殊字符和 HTML 标记。在 MySQL 中,我完全按照键入的方式存储注释正文,无需任何干预。但是,在显示时,我使用 HTML 实体来防止用户弄乱 HTML:

<?= nl2br(htmlentities($comment['body'], ENT_QUOTES, 'UTF-8')) ?>

这工作正常。但是,我现在正在尝试通过自动将放置在评论中的一些链接转换为更丰富的对象来丰富评论系统。这涉及照片论坛,有时用户通过在评论中粘贴URL来引用其他照片:

'http://www.jungledragon.com/image/12/eagle.html

使用正则表达式,我将上述有效链接替换为标记。在这种情况下,它将被替换为 img 标签,以便用户直接在评论中看到该图像的拇指,而不是链接。

更换工作正常。但是,由于我使用的是html实体,因此替换标记将呈现为文本,而不是呈现的图像。这里没有惊喜。

我的问题是,如何有选择地对注释正文进行 html 编码?我希望这些链接替换不会被转义,但其他所有内容都应该被转义。

先做html实体,然后替换。

通常,您会使用库来清理 HTML。下面列出了一些:

http://htmlpurifier.org/comparison