在PHP 5.2中,filter\\u var()清理文本。在WP中,esc\\u html()清理文本。前者适用于文本字符串中的高位字符,例如à,但后者没有。esc\\u html似乎完全吃掉了包含高位字符的字符串。以下是作为一个简单的WP插件编写的示例:
<?php
/*
Plugin Name: bugz tester
*/
class bugz_tester {
function __construct() {
if ( ! is_admin() )
return;
add_action(\'admin_menu\', array(&$this,\'admin_page\'));
}
function admin_page() {
add_options_page(\'Bugz tester\', \'bugz\', \'edit_posts\', \'bugz_sheet\', array(&$this,\'test_page\'));
}
function test_page() {
?>
<div class="wrap">
<?php
$ts = \'blah à blah\';
echo "original: " . $ts . "<br/>" ;
echo "PHP sanitized: " . $this->sanitize_txt( $ts ) . "<br/>" ;
echo "WP sanitized: " . esc_html( $ts ) . "<br/>";
die();
?>
</div>
<?php
}
function sanitize_txt ( $text ) {
$san_text = filter_var($text, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH | FILTER_FLAG_STRIP_LOW ) ;
return $san_text;
}
}
new bugz_tester();
?>
以下是输出:
原件:废话� 废话PHP消毒:废话WP消毒:
我不喜欢使用esc\\u html()。但如果改用filter\\u var(),则当我将字符串添加到WP自定义字段时,该字符串将消失。不知何故,WP卫生设施正在扼杀绳子。
我很困惑。如果你能提供线索,我将不胜感激。
SO网友:Chip Bennett
可能是因为实体是非UTF8字符?
这里是什么esc_html()
是否:
function esc_html( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
return apply_filters( \'esc_html\', $safe_text, $text );
}
如果不是这样的话,那么它在过滤时会被消毒
_wp_specialchars()
, 它可以进行双重编码(默认情况下,否)和各种事情。
供参考:
1) esc_html()
in source
2) _wp_specialchars()
in source