# wp_scrub_utf8()

URL: https://chugunov.pro/api-wordpress/functions/wp_scrub_utf8/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 6.9.0.

## Сигнатура

```php
wp_scrub_utf8( string $text ): string
```

## Описание

Понять, что делать при проблемах с кодировкой текста, бывает непросто.
Эта функция заменяет некорректные участки байтов, чтобы нейтрализовать возможные повреждения и не дать им вызвать дальнейшие проблемы в последующей обработке.
Однако заменять эти байты не всегда уместно. В некоторых случаях лучше оставить некорректные байты в строке, чтобы последующий код мог обработать их особым образом. Слишком ранняя замена байтов, как и слишком раннее экранирование для HTML, может привести к другим видам повреждения и потере данных.
В случае сомнений используйте эту функцию для замены участков некорректных байтов.
Замена выполняется по алгоритму «максимальной подчасти» для безопасных и совместимых строк. Это может приводить к нескольким символам замены подряд.
Пример:

// Valid strings come through unchanged.
'test' === wp_scrub_utf8( 'test' );

// Invalid sequences of bytes are replaced.
$invalid = "the byte xC0 is never allowed in a UTF-8 string.";
"the byte \u{FFFD} is never allowed in a UTF-8 string." === wp_scrub_utf8( $invalid, true );
'the byte � is never allowed in a UTF-8 string.' === wp_scrub_utf8( $invalid, true );

// Maximal subparts are replaced individually.
'.�.' === wp_scrub_utf8( ".\xC0." ); // C0 is never valid.
'.�.' === wp_scrub_utf8( ".\xE2\x8C." ); // Missing A3 at end.
'.��.' === wp_scrub_utf8( ".\xE2\x8C\xE2\x8C." ); // Maximal subparts replaced separately.
'.��.' === wp_scrub_utf8( ".\xC1\xBF." ); // Overlong sequence.
'.���.' === wp_scrub_utf8( ".\xED\xA0\x80." ); // Surrogate half.Внимание! Символ замены Unicode сам является символом Unicode (U+FFFD).
После того как участок некорректных байтов заменён им, невозможно определить, был ли символ замены изначально задуман или он появился в результате очистки байтов. Идеально оставлять замену только для отображения, но некоторые контексты (например, генерация XML или передача данных в большую языковую модель) требуют корректных входных строк.
См. такжеhttps://www.unicode.org/versions/Unicode16.0.0/core-spec/chapter-5/#G40630

## Параметры

- `$text` `string` — обязательный. Строка, которая предположительно является UTF-8, но может содержать некорректные последовательности байтов.

## Возвращаемое значение

`string`

## Исходный код

Файл: `wp-includes/utf8.php:109`

```php
function wp_scrub_utf8( $text ) {
	/*
	 * While it looks like setting the substitute character could fail,
	 * the internal PHP code will never fail when provided a valid
	 * code point as a number. In this case, there’s no need to check
	 * its return value to see if it succeeded.
	 */
	$prev_replacement_character = mb_substitute_character();
	mb_substitute_character( 0xFFFD );
	$scrubbed = mb_scrub( $text, 'UTF-8' );
	mb_substitute_character( $prev_replacement_character );

	return $scrubbed;
}
```

## История изменений

- 6.9.0 — Introduced.

## Связанные

Используется в: [`wp_check_invalid_utf8`](https://chugunov.pro/api-wordpress/functions/wp_check_invalid_utf8/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/wp_scrub_utf8/
