文|何掌柜
对付很多 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来保存经由净化的结果以备后用。
因思维新专注于高端网站订制开拓,不仅仅为您培植网站,还为您做网络营销。