文|何掌柜

对付很多 web 运用来说,大略地转义 HTML 是不足的。
你可能想完备去除任何HTML,或者许可一小部分子集的 HTML 存在。
若是如此,则利用 HTML Purifier 库。

HTML Purifier 是一个经由充分测试但效率比较低的库。
这便是为什么如果你的需求并不繁芜就应利用htmlentities(), 由于它的效率要快得多。

phphtml输出php的HTML输入和输出庞杂净化 Java

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来保存经由净化的结果以备后用。

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