wp_check_invalid_utf8() WP 2.8.0

Перевіряє наявність неприпустимих символів UTF8 у рядку.

Функція нічого не робить, якщо опція get_option( 'blog_charset' )не дорівнює одному з utf8, utf-8, UTF8, UTF-8.

Для тестів є спеціальний текст із неприпустимими UTF-8 символами . У ньому приклади багатьох порушень UTF-8, включаючи поодинокі початкові байти, пропущені байти продовження, надмірно довгі послідовності і т.д.

Основа для:
sanitize_text_field() ,
Хуків немає.

Повертає

Строку. Провірений текст.

Використання

wp_check_invalid_utf8( $string, $strip );
$string
(рядок) (обов’язковий)
Текст, який має бути перевірено.
$strip
(true/false)
Чи слід намагатися видалити символи UTF-8.


Типово: false

Приклади

0

#1 Перевірка роботи функції

$examples = [ 'Valid ASCII' => "a", 'Valid 2 Octet Sequence' => "xc3xb1", 'Valid 3 Octet Sequence' => "xe2x82xa1", 'Valid 4 Octet Sequence' => "xx0x90x8cxbc", 'Valid 5 Octet Sequence (але не Unicode!)' => "xf8xa1xa1xa1xa1", 'Valid 6 Octet Sequence (але не Unicode!)' => "xfcxa1xa1xa1xa1xa1", 'Invalid 2 Octet Sequence' => "xc3x28", 'Invalid Sequence Identifier' => "xa0xa1", 'Invalid 3 Octet Sequence (in 2nd Octet)' => "xe2x28xa1", 'Invalid 3 Octet Sequence (in 3rd Octet)' => "xe2x82x28", 'Invalid 4 Octet Sequence (in 2nd Octet)' => "xf0x28x8cxbc", 'Invalid 4 Octet Sequence (in 3rd Octet)' => "xx0x90x28xbc", 'Invalid 4 Octet Sequence (in 4th Octet)' => "xf0x28x8cx28", ]; $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 (але не Unicode!)"]=> string(0) "" ["Valid 6 Octet Sequence (але не 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Введено.

Код wp_check_invalid_utf8() WP 6.0.2

function wp_check_invalid_utf8( $string, $strip = false ) { $string = (string) $string; if ( 0 === strlen( $string ) ) { return ''; } // Store site charset як static до avoid multiple calls to get_option(). static $is_utf8 = null; if ( ! isset( $is_utf8 ) ) { $is_utf8 = in_array( get_option( 'blog_charset' ), array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ), true ); } if ( ! $is_utf8 ) { return $string; } // Check for support for utf8 ininstalled PCRE library once and store the result in a static. static $utf8_pcre = null; if ( ! isset( $utf8_pcre ) ) { // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged $utf8_pcre = @preg_match( '/^./u', 'a' ); } // Ви не можете дати utf8 в PCRE installation, якщо тільки перевірити string в цих випадках. if ( ! $utf8_pcre ) { return $string; } // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged -- preg_match fails when it encounters invalid UTF8 в $string. if ( 1 === @preg_match( '/^./us', $string ) ) { return $string; } // Attempt to strip bad chars if requested (не recommended). if ( $strip && function_exists( 'iconv' ) ) { return iconv('utf-8', 'utf-8', $string); } return ''; }