## WP_KSES() │ WP 1.0.0
Функция WP_KSES() очищает содержимое, оставляя только разрешенные HTML-теги, их атрибуты и значения атрибутов. Она также удаляет некоторые HTML-сущности из строки.
### Важно!
Эта функция ожидает, что строка не содержит экранирования (unslashed). Это означает, что перед использованием вам нужно удалить все обратные слеши с помощью функции wp_unslash(), так как WordPress автоматически добавляет их в запросы $_POST (это делалось PHP с версий до 5.4).
KSES — это рекурсивная аббревиатура, которая расшифровывается как "KSES Strips Evil Scripts" (KSES удаляет злобные скрипты) — подсистема в WordPress, изначально написанная Ульфом Харнхаммаром. Она предназначена для проверки и очистки текста, вводимого пользователем. С помощью KSES можно задать список допустимых тегов, стилей и протоколов, на основе которых функция удаляет всё, что не соответствует этим параметрам.
### Использует:
- wp_kses_allowed_html(): возвращает список разрешенных тегов.
### Используется в:
- wp_filter_post_kses()
- wp_kses_data()
- wp_filter_nohtml_kses()
- wp_filter_kses()
- wp_kses_post()

1 раз — 0.0003581 сек (быстро) | 50000 раз — 2.35 сек (быстро) | PHP 7.4.25, WP 6.0.1
### Нет хуков.
---
### Возврат
Строка. Очищенное содержимое, содержащее только разрешенные HTML-теги.
### Использование
```php
wp_kses( $string, $allowed_html, $allowed_protocols );
-
$string (строка) (обязательный) — содержимое, которое нужно очистить.
-
$allowed_html (массив/строка) (обязательный) — список разрешенных HTML-элементов в поданном содержимом. Если указать строковое значение, это будет означать группу предопределенных тегов:
post— оставить теги, valid для постов (глобальная переменная$allowedposttags)strip— удалит�� все теги. Аналог функцииstrip_tags().entities— HTML-сущности, такие как (глобальная переменная$allowedentitynames)user_description,pre_user_description— то же самое, что и по умолчанию, но с разрешенным атрибутомrelдля ссылок<a rel="">.defaultили любая строка — список валидных тегов. Используется для очищения текста комментариев: глобальная переменная$allowedtags.
Примечание: Параметр может принимать строку, хотя в документации функции указано только массив. Подтверждение:
wp_kses() → wp_kses_split() → _wp_kses_split_callback() → wp_kses_split2() → wp_kses_allowed_html().
-
$allowed_protocols (массив) — список разрешенных протоколов для ссылок в содержимом. По умолчанию разрешены следующие протоколы:
- http
- https
- ftp
- ftps
- mailto
- news
- irc
- gopher
- nntp
- feed
- telnet
- mms
- rtsp
- svn
- tel
- fax
- xmpp
- webcal
- urn
Это основные протоколы. Лучше запретить протокол javascript для сомнительных пользователей.
По умолчанию: array().
Примеры
1 Очистка содержимого с помощью WP KSES
Оставим только теги 'a' (с атрибутами 'href' и 'title'), 'br', 'em' и 'strong'. Все остальные будут удалены:
$string = wp_unslash( $_POST['text'] );
// Разрешенные теги
$allowed_html = array(
'a' => array(
'href' => true,
'title' => true,
),
'br' => array(),
'em' => array(),
'strong' => array()
);
$text = wp_kses( $string, $allowed_html );
echo $text;
2 Оставим теги, которые допустимы при комментировании
$text = "1111222";
$text = wp_kses( $text, 'default' );
echo $text;
// Вывод:
// 1111222
3 Какие теги разрешены в глобальной переменной $ALLOWEDTAGS
Тег и разрешенные для него атрибуты:
a:{href,title}abbr:{title}acronym:{title}bblockquote:{cite}citecodedel:{datetime}emiq:{cite}sstrikestrong
Примечания
- См.
wp_kses_post()для фильтрации содержимого поста и полей. - См.
wp_allowed_protocols()для получения списка разрешенных протоколов по умолчанию в URL ссылок.
Журнал изменений
С версии 1.0.0 - введено.
Код WP KSES
function wp_kses( $content, $allowed_html, $allowed_protocols = array() ) {
if ( empty( $allowed_protocols ) ) {
$allowed_protocols = wp_allowed_protocols();
}
$content = wp_kses_no_null( $content, array( 'slash_zero' => 'keep' ) );
$content = wp_kses_normalize_entities( $content );
$content = wp_kses_hook( $content, $allowed_html, $allowed_protocols );
return wp_kses_split( $content, $allowed_html, $allowed_protocols );
}
Связанные функции
KSES (Очистка HTML)
allowed_tags()wp_filter_kses()wp_filter_nohtml_kses()wp_kses_allowed_html()wp_kses_array_lc()wp_kses_data()wp_kses_hair()wp_kses_post()wp_kses_uri_attributes()wp_kses_version()
Очистка и экранирование
esc_attr()esc_html()esc_js()esc_textarea()esc_url()esc_url_raw()sanitize_email()sanitize_file_name()sanitize_html_class()sanitize_option()sanitize_post_field()sanitize_text_field()sanitize_textarea_field()sanitize_title()sanitize_title_with_dashes()tag_escape()validate_file()wp_check_invalid_utf8()wp_filter_post_kses()wp_strip_all_tags()