почему esc_html () ничего не возвращает, если строка содержит символ с высоким битом?

В PHP 5.2 фильтр_var () дезактивирует текст. В WP esc_html () дезактивирует текст. Первая работает с символом с высоким битом в текстовой строке, например, а, а вторая – нет. esc_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(); ?> 

Вот результат:

оригинал: blah blah
PHP дезинфицирован: blah à blah
WP дезинформировал:

Я не одержим использованием esc_html (). Но если я использую вместо filter_var (), строка исчезает, когда я добавляю ее в WP пользовательское поле. Каким-то образом санитария WP убивает строку.

Я озадачен. Был бы благодарен за подсказку.

Возможно, потому что объект является символом не 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() при фильтрации с помощью _wp_specialchars() , который выполняет двойное кодирование (по умолчанию, нет) и всевозможные вещи.

Для справки:

1) esc_html() в источнике

2) _wp_specialchars() в источнике

Использование функции filter_var () PHP с соответствующими фильтрами позволяет вставить метализованный текст в мета-поле. Что происходит с esc_html, похоже, является проблемой нечеткого кодирования символов.

Для WordPress 3.2 потребуется PHP 5.2. Итак, если у вас возникли проблемы с функцией WP esc_html (), PHP 5.2 filter_var является хорошей альтернативой.