WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

wp_kses() WP 1.0.1

Чистит строку, оставляя в ней только указанные HTML теги, их атрибуты и значения атрибутов.

Также функция убирает некоторые HTML сущности.

Ожидает НЕэкранированную строку! Это значит, что перед использование нужно удалить все экранные слэши (см. wp_unslash()), которые WP автоматически добавляет для любого $_POST запроса, так как это делал PHP (PHP's magic quotes) до версии 5.4.

KSES (рекурсивный акроним от KSES Strips Evil Scripts) — подсистема в WordPress (изначально написанная Ulf Harnhammar), предназначенная для проверки и очистки текста, введённого пользователем. Позволяет задать список допустимых тэгов, стилей и протоколов, и на основе этих параметров убрать из текста пользователя всё, что им не соответствует.

Работает на основе: wp_kses_allowed_html()
1 раз = 0.000364с = быстро | 50000 раз = 2.26с = быстро | PHP 7.1.1, WP 4.7.2

Хуков нет.

Возвращает

Очищенную строку.

Использование

wp_kses( $string, $allowed_html, $allowed_protocols );
$string(строка) (обязательный)
Контент, который нужно очистить.
$allowed_html(массив/строка) (обязательный)

Список допустимых HTML элементов в переданном контенте. Если указать строковое значение, то оно будет означать группу предустановленных тегов:

  • post — оставит теги допустимые для постов (глобальная переменная $allowedposttags)
  • strip — вырежет все теги. Аналог функции PHP strip_tags()
  • entities — HTML сущности, как   (глобальная переменная $allowedentitynames)
  • user_description, pre_user_description — тоже что и default, только еще разрешается атрибут rel для ссылок <a>.
  • default или любая строка — список базовых допустимых тегов. Используется при очистки текста комментария: глобальная переменная $allowedtags.

Параметр может принимать строку! Хотя в комментариях функции написано только массив. см. wp_kses() → wp_kses_split()_wp_kses_split_callback()wp_kses_split2()wp_kses_allowed_html()

$allowed_protocols(массив)

Протоколы, ссылки с которыми будут допущены в контенте. По умолчанию разрешены следующие протоколы, см. wp_allowed_protocols():

http
https
ftp
ftps
mailto
news
irc
gopher
nntp
feed
telnet
mms
rtsp
svn
tel
fax
xmpp
webcal
urn

Это базовые протоколы. Протокол javascript лучше запретить для сомнительных пользователей.

По умолчанию: array()

Примеры

#1. Очистим контент, используя KSES WP

Оставим в нем только теги: '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 = "<div>1111</div><strong>222</strong>";
$text = wp_kses( $text, 'default' );
echo $text;

// выведет
// 1111<strong>222</strong>

#3. Какие теги находятся в глобальной $allowedtags

Array(
	[a] => Array(
			[href] => 1
			[title] => 1
		)

	[abbr] => Array(
			[title] => 1
		)

	[acronym] => Array(
			[title] => 1
		)

	[b] => Array()

	[blockquote] => Array(
			[cite] => 1
		)

	[cite] => Array()

	[code] => Array()

	[del] => Array(
			[datetime] => 1
		)

	[em] => Array()

	[i] => Array()

	[q] => Array(
			[cite] => 1
		)

	[s] => Array()

	[strike] => Array()

	[strong] => Array()
)

Заметки

  • Смотрите: wp_kses_post() for specifically filtering post content and fields.
  • Смотрите: wp_allowed_protocols() for the default allowed protocols in link URLs.

Список изменений

С версии 1.0.0 Введена.

Код wp_kses() WP 5.5.1

wp-includes/kses.php
<?php
function wp_kses( $string, $allowed_html, $allowed_protocols = array() ) {
	if ( empty( $allowed_protocols ) ) {
		$allowed_protocols = wp_allowed_protocols();
	}

	$string = wp_kses_no_null( $string, array( 'slash_zero' => 'keep' ) );
	$string = wp_kses_normalize_entities( $string );
	$string = wp_kses_hook( $string, $allowed_html, $allowed_protocols );

	return wp_kses_split( $string, $allowed_html, $allowed_protocols );
}

Cвязанные функции

Из метки: kses (очистка html)

Еще из раздела: Очистка данных

7 комментов