wp_kses() WP 1.0.0

Чистить рядок, залишаючи в ньому лише зазначені 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.0003581 сек
(швидко) | 50000 разів – 2.35 сек
(швидко) |
PHP 7.4.25, WP 6.0.1

Хуків немає.

Повертає

Строку.

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

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_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()

Приклади

0

#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;
0

#2 Залишимо теги, які допустимі при коментуванні

$text = "<div>1111</div><strong>222</strong>";
$text = wp_kses($text, 'default');
echo $text;

// виведе
// 1111<strong>222</strong>
0

#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()
)

нотатки

список змін

З версії 1.0.0Введено.

Код wp_kses() WP 6.0.2

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