Функция esc_attr() используется для экранирования текстовых данных перед выводом в атрибуты HTML-тегов, таких как alt, value, title и другие. Она преобразует специальные символы, такие как <, >, &, " и ', в их безопасные HTML-сущности, чтобы предотвратить возможные уязвимости XSS.
esc_attr( string $text ): string
Параметры
$text(строка, обязательный): Текст, который необходимо экранировать.
Возвращаемое значение
string: Экранированная строка, готовая для использования в HTML-атрибуте.
Когда использовать
- Используйте
esc_attr()всегда при выводе данных в атрибуты HTML-тегов. Например, для значений полей форм, таких какinput,textarea, и любых других HTML-атрибутов. - Используйте
esc_url()для экранирования URI в атрибутах, таких какhrefилиsrc, поскольку толькоesc_attr()может не защитить от XSS в этих случаях.
Пример 1: Безопасный вывод данных в атрибуте value
Предположим, что у нас есть данные, введенные пользователем, которые сохраняются в переменной $fname, и мы хотим безопасно вывести их в поле формы.
<?php
$fname = isset($_POST['fname']) ? $_POST['fname'] : '';
?>
<input type="text" name="fname" value="<?php echo esc_attr($fname); ?>">
Этот код экранирует любые специальные символы в пользовательском вводе, предотвращая XSS-атаки.
Пример 2: Правильное использование с URI
Когда мы выводим ссылки или изображения с URL, важно использовать esc_url() вместо esc_attr().
<!-- Правильно: -->
<img src="<?php echo esc_url( $src ); ?>" alt="<?php echo esc_attr( $alt ); ?>">
<!-- Неправильно: -->
<img src="<?php echo esc_attr( $src ); ?>" alt="<?php echo esc_attr( $alt ); ?>">
Пример 3: Пример очистки JSON данных
Функция esc_attr() может использоваться для экранирования JSON-строк, передаваемых в HTML-атрибуты.
$qargs = [
'per_page' => 50,
'orderby' => [ 'volume_usd' => 'desc' ],
'target_symbol' => 'foo',
];
$json = json_encode( $qargs );
$esc_json = esc_attr( $json );
echo '<input type="hidden" value="' . $esc_json . '">';
Вывод:
<input type="hidden" value="{"per_page":50,"orderby":{"volume_usd":"desc"},"target_symbol":"foo"}">
Пример 4: Экранирование специальных символов
Пример экранирования строки с особыми символами.
$text = "<span>(тег) '(кавычка) \"(двойная кавычка) &(амперсанд)";
echo esc_attr( $text );
// Выведет: <span>(тег) '(кавычка) "(двойная кавычка) &(амперсанд)
Пример 5: Избежание двойного кодирования
Функция esc_attr() автоматически избегает двойного кодирования сущностей, как показано ниже:
$text = "> and &";
echo esc_attr( $text ); // > and &
Особенности
esc_attr()предотвращает двойное кодирование: Если строка уже содержит закодированные сущности, они не будут закодированы повторно.- Хук
attribute_escape: Применяется фильтрattribute_escape, который можно изменить или дополнить плагинами для дополнительной кастомизации.
Заключение
Функция esc_attr() — это мощный инструмент для экранирования данных, которые выводятся в HTML-атрибуты, предотвращая возможные уязвимости и XSS-атаки. Ее необходимо использовать при работе с пользовательскими данными, особенно при выводе значений полей формы.