问题描述

我对于 esc_html() 和 wp_kses() 的不同用法感到困惑。我明白,esc_html() 将特殊字符转换为 HTML 实体,而 wp_kses() 会删除不需要的标签 (例如< script>),但我不知道应该在哪些上下文中使用或分开使用。

如果我通过 esc_html() 运行一些不受信任的 HTML,那么任何 JavaScript 将以纯文本形式显示,而不是由浏览器呈现,所以在这一点上是安全的,是否正确?通过 wp_kses() 运行它的唯一原因是避免原始脚本显示?

基本上, esc_html() 使它安全,并且 wp_kses() 使它漂亮。那是对的吗?

最佳解决方案

一般规则,至少 as espoused by Mark Jaquith,在输入上进行消毒,在输出上转义 (这个规则的必然结果早期消毒,逃避迟到) 。

因此,在数据库中存储不受信任的数据时使用消毒过滤器 (如 kses()系列),并在模板中输出不受信任的数据时使用转义过滤器 (即 esc_*()系列) 。

次佳解决方案

当您希望允许 html 的某个子集在结果中时,应使用 kses 函数。例如,注释允许其中的一些 HTML 用于粗体,斜体,链接等。

应该使用 esc_html 函数完全转出 html 。没有 HTML 将不会被转换成浏览器将被解释为 non-HTML 的东西。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。