看起来开箱即用,没有什么区别
function esc_html( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
* Filters a string cleaned and escaped for output in HTML.
*
* Text passed to esc_html() is stripped of invalid or special characters
* before output.
*
* @since 2.8.0
*
* @param string $safe_text The text after it has been escaped.
* @param string $text The text prior to being escaped.
*/
return apply_filters( \'esc_html\', $safe_text, $text );
}
function esc_attr( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
* Filters a string cleaned and escaped for output in an HTML attribute.
*
* Text passed to esc_attr() is stripped of invalid or special characters
* before output.
*
* @since 2.0.6
*
* @param string $safe_text The text after it has been escaped.
* @param string $text The text prior to being escaped.
*/
return apply_filters( \'attribute_escape\', $safe_text, $text );
}
这两个函数之间的唯一区别是最后应用的过滤器。WordPress没有向这些过滤器添加任何内容,因此在标准WP安装中,它们是非操作的。它们是在边缘案例中提供的,有人可能需要它们。
快速问答;A
So by default they\'re identical?
对这个
esc_attr
和
esc_html
函数具有相同的实现
Are the filters identical?
唯一的区别是它们有不同的名称,它们的工作方式相同,它们的使用方式相同,核心中没有使用任何过滤器。
Do the filters do anything?
不当
wp_check_invalid_utf8
和
_wp_specialchars
被称为。
过滤器不会进行转义,它们是插件进行额外检查和处理的机会。
Are there any edge cases?
只有当你使用过滤器时,说你已经
esc_html
但不是
attribute_escape
, 反之亦然。对于标准WP安装,这两个功能是相同的,没有区别。
Why attribute_escape
and not esc_attr
?
向后兼容性。过去有一个
attribute_escape
函数,现在在
esc_
添加了样式函数。
Why would I use these filters?
¯\\_(ツ)_/¯
这将是一种罕见的情况。有些人可能会滥用它,就像滥用翻译API来搜索替换文本一样。这已经是一种很糟糕的做法,因为这些过滤器被称为很多小的速度损失被放大了数千倍
但是请考虑,如果您不小心,可能会破坏这些函数的安全性,方法是撤消它们添加的转义,或在最后添加未转义的内容。因此,过滤器是危险的。
Do I Need To Worry About This?
不需要。如果你使用了这些过滤器,你只需要担心,因为它们本身就应该发出巨大的红色警报,表明你的开发中出现了严重错误。
功能esc_attr
和esc_html
可安全使用,并可转载内容。如果您重视代码的安全性,那么您有使用它们的道德和道德义务
Does this mean I should just use esc_html
?
不,逃避就是设定期望。如果需要属性,请使用
esc_attr
. 仅仅因为目前它的功能相同,并不意味着未来安全版本不会改变这一点