php - html净化器的替代品

标签 php

我想接受来自用户的 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/

相关文章:

php - 表单 - 根据第一次选择使用 MySQL 查询更新选项

php - include() 和调用函数哪个更好?

php - 元编程到几种输出语言

php - Azure 云服务 PHP Pear 包

php - 我如何在 Laravel 5 中使用部分?

php - 使用php创建、编写和下载一个txt文件

java - Matlab、PHP 和 Java

php - 检查url是否存在

php - 将空的 $_POST 数据更改为 NULL 的快速方法

php - FirePHP 不输出任何东西