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 '';
}