您的位置 首页 php

php的HTML输入和输出复杂净化

因思维新建站官网:www.inspinovation.cn

文|何掌柜

对于很多 web 应用来说,简单地转义 HTML 是不够的。 你可能想完全去除任何HTML,或者允许一小部分子集的 HTML 存在。 若是如此,则使用 HTML Purifier 库。

HTML Purifier 是一个经过充分测试但效率比较低的库。 这就是为什么如果你的需求并不复杂就应使用htmlentities(), 因为它的效率要快得多。

HTML Purifier 相比 strip_tags() 是有优势的, 因为它在净化 HTML 之前会对其校验。 这意味着如果用户输入无效 HTML,HTML Purifier 相比 strip_tags() 更能保留 HTML 的原意。 HTML Purifier 高度可定制,允许你为 HTML 的一个子集建立白名单来允许这个 HTML 子集的实体存在输出中。

但其缺点就是相当的慢,它要求一些设置,在一个共享主机的环境里可能是不可行的。 其文档通常也复杂而不易理解。 以下示例是一个基本的使用配置。 查看文档阅读 HTML Purifier 提供的更多更高级的特性。

示例

// Include the HTML Purifier library

require_once(‘htmlpurifier-4.4.0/HTMLPurifier.auto.php’);

// Oh no! The user has submitted malicious HTML, and we have to display it in our web app!

$evilHtml = ‘

Mua-ha-ha! Twiddling my evil mustache…

‘;

// Set up the HTML Purifier object with the default configuration.

$purifier = new HTMLPurifier(HTMLPurifier_Config::createDefault());

$safeHtml = $purifier->purify($evilHtml);

// $safeHtml is now sanitized. You can output $safeHtml to your users without fear!

?>

陷阱

以错误的 字符编码 使用 htmlentities() 会造成意想不到的输出。 在调用该函数时始终确认指定了一种字符编码,并且该编码与将被净化的 字符串 的编码相匹配。 更多细节请查看 UTF-8 一节。

使用 htmlentities() 时,始终包含 ENT_QUOTES 和字符编码参数。 默认情况下,htmlentities() 不会对单引号编码。多愚蠢的默认做法!

HTML Purifier 对于复杂的 HTML 效率极其的低。可以考虑设置一个 缓存 方案如APC来保存经过净化的结果以备后用。

因思维新专注于高端网站订制开发,不仅仅为您建设网站,还为您做网络营销。

文章来源:智云一二三科技

文章标题:php的HTML输入和输出复杂净化

文章地址:https://www.zhihuclub.com/78769.shtml

关于作者: 智云科技

热门文章

网站地图