Функция wp_kses_hair()
отвечает за разбор строки, содержащей список атрибутов HTML, и преобразование её в массив с атрибутами. Она обрабатывает атрибуты, добавляя кавычки к значениям, если они отсутствуют, удаляет запрещенные протоколы URL и устраняет дублирующиеся атрибуты, сохраняя только первый экземпляр.
wp_kses_hair( string $attr, string[] $allowed_protocols ): array[]
Параметры функции
$attr
(строка) Обязательный. Строка, содержащая атрибуты HTML элемента.$allowed_protocols
(массив) Обязательный. Массив допустимых URL-протоколов, которые могут остаться в значениях атрибутов.
Возвращаемое значение
- Возвращает массив, который описывает каждый атрибут, или пустой массив, если ничего не удалось разобрать.
Пример 1: Простая демонстрация работы
В этом примере мы разобьём строку с атрибутами и посмотрим на результат.
$attributes = wp_kses_hair(' src="http://example.com/image.jpg" alt="пример изображения" custom=foo', array('http'));
print_r($attributes);
/*
$attributes будет содержать:
Array
(
[src] => Array
(
[name] => src
[value] => http://example.com/image.jpg
[whole] => src="http://example.com/image.jpg"
[vless] => n
)
[alt] => Array
(
[name] => alt
[value] => пример изображения
[whole] => alt="пример изображения"
[vless] => n
)
[custom] => Array
(
[name] => custom
[value] => foo
[whole] => custom="foo"
[vless] => n
)
)
*/
Пример 2: Обработка протоколов
Теперь рассмотрим случай, когда указанный протокол отличается от значения атрибута. В этом случае функция удалит протокол, оставив URL относительным.
$attributes = wp_kses_hair('src=http://example.com/image.jpg', array('https'));
print_r($attributes);
/*
Ожидаемый результат:
Array
(
[src] => Array
(
[name] => src
[value] => //example.com/image.jpg
[whole] => src="//example.com/image.jpg"
[vless] => n
)
)
*/
Пример 3: Удаление дубликатов атрибутов
Функция также устраняет дублирующиеся атрибуты, оставляя только первый экземпляр.
$attributes = wp_kses_hair('src="http://example.com/img.jpg" src="http://example.com/img2.jpg"', array('http'));
print_r($attributes);
/*
Ожидаемый результат:
Array
(
[src] => Array
(
[name] => src
[value] => http://example.com/img.jpg
[whole] => src="http://example.com/img.jpg"
[vless] => n
)
)
*/
Пример 4: Отсутствие кавычек
Если значения атрибутов не заключены в кавычки, функция автоматически добавляет их.
$attributes = wp_kses_hair('src=http://example.com/photo.jpg alt=картинка', array('http'));
print_r($attributes);
/*
Ожидаемый результат:
Array
(
[src] => Array
(
[name] => src
[value] => http://example.com/photo.jpg
[whole] => src="http://example.com/photo.jpg"
[vless] => n
)
[alt] => Array
(
[name] => alt
[value] => картинка
[whole] => alt="картинка"
[vless] => n
)
)
*/
Заключение
Функция wp_kses_hair()
является полезным инструментом для работы с атрибутами HTML, обеспечивая их корректную обработку и формирование. Она позволяет поддерживать стандарты HTML и защищает от потенциальных уязвимостей, связанных с некорректными протоколами URL. Эта функция будет полезна при разработке плагинов и тем, где требуется очистка и обработка пользовательского ввода.