wp_check_invalid_utf8()
Проверяет наличие недопустимых UTF8 символов в строке.
Функция ничего не делает, если опция get_option( 'blog_charset' ) не равна одному из utf8, utf-8, UTF8, UTF-8.
Для тестов есть специальный текст с недопустимыми UTF-8 символами. В нём примеры многих нарушений UTF-8, включая одиночные начальные байты, пропущенные байты продолжения, чрезмерно длинные последовательности и т.д.
Работает на основе: is_utf8_charset()
Основа для: sanitize_text_field(), esc_html()
Хуков нет.
Возвращает
Строку. Проверенный текст.
Использование
wp_check_invalid_utf8( $string, $strip );
- $string(строка) (обязательный)
- Текст, который должен быть проверен.
- $strip(true/false)
- Следует ли пытаться удалить недопустимые UTF-8 символы.
По умолчанию: false
Примеры
#1 Проверка работы функции
$examples = [
'Valid ASCII' => "a",
'Valid 2 Octet Sequence' => "\xc3\xb1",
'Valid 3 Octet Sequence' => "\xe2\x82\xa1",
'Valid 4 Octet Sequence' => "\xf0\x90\x8c\xbc",
'Valid 5 Octet Sequence (but not Unicode!)' => "\xf8\xa1\xa1\xa1\xa1",
'Valid 6 Octet Sequence (but not Unicode!)' => "\xfc\xa1\xa1\xa1\xa1\xa1",
'Invalid 2 Octet Sequence' => "\xc3\x28",
'Invalid Sequence Identifier' => "\xa0\xa1",
'Invalid 3 Octet Sequence (in 2nd Octet)' => "\xe2\x28\xa1",
'Invalid 3 Octet Sequence (in 3rd Octet)' => "\xe2\x82\x28",
'Invalid 4 Octet Sequence (in 2nd Octet)' => "\xf0\x28\x8c\xbc",
'Invalid 4 Octet Sequence (in 3rd Octet)' => "\xf0\x90\x28\xbc",
'Invalid 4 Octet Sequence (in 4th Octet)' => "\xf0\x28\x8c\x28",
];
$result = [];
foreach ( $examples as $key => $value ) {
$result[ $key ] = wp_check_invalid_utf8( $value );
}
var_dump( $result );
Результат:
array(13) {
["Valid ASCII"]=> string(1) "a"
["Valid 2 Octet Sequence"]=> string(2) "ñ"
["Valid 3 Octet Sequence"]=> string(3) "₡"
["Valid 4 Octet Sequence"]=> string(4) "?"
["Valid 5 Octet Sequence (but not Unicode!)"]=> string(0) ""
["Valid 6 Octet Sequence (but not Unicode!)"]=> string(0) ""
["Invalid 2 Octet Sequence"]=> string(0) ""
["Invalid Sequence Identifier"]=> string(0) ""
["Invalid 3 Octet Sequence (in 2nd Octet)"]=> string(0) ""
["Invalid 3 Octet Sequence (in 3rd Octet)"]=> string(0) ""
["Invalid 4 Octet Sequence (in 2nd Octet)"]=> string(0) ""
["Invalid 4 Octet Sequence (in 3rd Octet)"]=> string(0) ""
["Invalid 4 Octet Sequence (in 4th Octet)"]=> string(0) ""
}
Список изменений
| С версии 2.8.0 | Введена. |
| С версии 6.9.0 | Stripping replaces invalid byte sequences with the Unicode replacement character U+FFFD (�). |
Код wp_check_invalid_utf8() wp check invalid utf8 WP 6.9
function wp_check_invalid_utf8( $text, $strip = false ) {
$text = (string) $text;
if ( 0 === strlen( $text ) ) {
return '';
}
// Store the site charset as a static to avoid multiple calls to get_option().
static $is_utf8 = null;
if ( ! isset( $is_utf8 ) ) {
$is_utf8 = is_utf8_charset();
}
if ( ! $is_utf8 || wp_is_valid_utf8( $text ) ) {
return $text;
}
return $strip
? wp_scrub_utf8( $text )
: '';
}