我正在stackoverflow上写一个类似here的评论系统,我不确定在输出之前清理用户内容的最佳方法。
我真的很想在将内容输出到页面时对其进行清理,因为如果我在将内容插入数据库之前对其进行清理,我可以想到可能会发生的各种问题。
到目前为止,我一直只是简单地运行我的用户内容
htmlentities($content, ENT_QUOTES, 'UTF-8')
据我了解,这使得输出安全。
但是,我用于评论系统的 WYSIWYG 编辑器允许使用以下 HTML 标记进行格式化:
<code><span><div><label><a><br><p><b><i><del><strike><u><img><video><audio><iframe><object><embed><param><blockquote><mark><cite><small><ul><ol><li><hr><dl><dt><dd><sup><sub><big><pre><code><figure><figcaption><strong><em><table><tr><td><th><tbody><thead><tfoot><h1><h2><h3><h4><h5><h6>
因此,我需要能够输出这些标签而不是对其进行编码,以便正确显示注释。
我正在使用的 WYSIWYG 编辑器的文档(Redactor)建议通过 运行用户内容strip_tags()
,将上述标签作为允许的标签参数传递。但是,我在 stackoverflow 上阅读的问题和答案表明这可能还不够。
在假设下操作strip_tags()
还不够好,我一直在寻找替代方案,似乎最受推崇的选项之一是 HTML Purifier。但是,我一直在这里阅读问题和答案,表明 HTML Purifier非常慢。
由于评论的呈现方式,每个评论都必须单独纯化(我不能将所有评论都作为一个字符串),我想知道如果有 HTML Purifier,这是否会太慢一个线程中有数十甚至数百条评论。
概括:
- 对于这种类型的评论系统,HTML Purifier 会不会太慢?
- 有更好的选择吗?
- stackoverflow 是如何处理这个问题的?