我想接受来自用户的 html 输入并将其发布到我的网站上,还想确保它不会由于脏 html 代码而导致我的网站模板出现问题。
我过去使用过 html 净化器,但 Html 净化器无法在我的其中一台服务器上运行。所以我正在寻找最佳选择。 这纯粹是用 php 编写的。 它可以修复像
这样的脏 html 代码</div> it is dirty code as div is closed without opening.
最佳答案
没有第三方库的简单解决方案:创建一个 DOMDocument
并调用loadHTML
用你的输入。用 <html>
包围输入和 <body>
如果您只解析一小段代码,请使用标签。您可能也想抑制警告,因为您会因为常见的错误 HTML 而吐出它们。
然后简单地遍历生成的文档树,删除您未包含在已知良好列表中的所有元素和属性。您还应该检查允许的 URL 属性以确保它们使用已知的良好方案,如 http:
,而不是潜在麻烦的方案,如 javascript:
.如果您想更进一步,您可以检查是否只有允许的元素组合相互嵌套(允许的元素数量越少,这就越容易)。
最后,使用 saveHTML
再次序列化代码片段的节点。 .因为您是从 DOM 创建新的标记,而不是维护原始的(可能格式错误的)标记,所以您要阻止的是一整类奇怪的标记注入(inject)技术。
关于php - html净化器的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4047655/