Возвращает строку, предварительно экранируя в ней HTML-теги. Если в строке нечего экранировать, то функция возвратит ее в первоначальном состоянии.
Кроме того, функция заменяет на HTML-сущности одинарные и двойные кавычки и амперсанд, по сути вот список заменяемых символов:
Было | Стало |
---|---|
& (амперсанд) | & |
" (двойная кавычка) | " |
' (одинарная кавычка) | ' |
< (меньше, чем, часть HTML тегов) | < |
> (больше, чем, часть HTML тегов) | > |
Также не производит двойного преобразования. Если изучить исходный код функции, то в целом можно сказать, что она не особо отличается от esc_attr(), но тем не менее esc_attr() – для HTML-атрибутов, esc_html()
– для вывода непосредственно в HTML-коде.
Также, функция проверяет переданную строку на наличие в ней неправильной кодировки utf-8 и, по возможности, пытается исправить.
Кроме того, к результату ещё будет применён фильтр-хук esc_html, на который может быть добавлена какая-либо дополнительная обработка/очистка строки.
Если у вас возникают вопросы, для чего вообще нужны все эти экранирующие функции, рекомендую посмотреть мой видеоурок, где я подробно показываю всё это на примере.
esc_html( $text )
Начнём с максимально лёгкого примера, попробуем вывести ссылку, т.е. HTML-тег <a>
.
$text = '<a href="https://misha.agency">Миша Рудрастых</a>'; // выведется кликабельная ссылка // в исходном коде будет: <a href="https://misha.agency">Миша Рудрастых</a> echo $text; // выведется текст <a href="https://misha.agency">Миша Рудрастых</a> // в исходном коде будет <a href="https://misha.agency">Миша Рудрастых</a> echo esc_html( $text );
Функция не осуществляет повторное экранирование, как например esc_textarea().
echo esc_html( '& - &' ); // & - & echo esc_textarea( '& - &' ); // & - &amp;
При передачи в функцию массива получим PHP-уведомление Notice: Array to string conversion, а сама функция вернёт строку Array
. Поэтому для очистки массивов используйте array_map()
.
$texts = array( '<strong>Привет, мир!</strong>', '&' ); // в первом параметре – название функции, во втором – массив, который нужно обработать $escaped_texts = array_map( 'esc_html', $texts ); print_r( $escaped_texts );
Получим:
Array ( [0] => <strong>Привет, мир!</strong> [1] => &amp; )
return apply_filters( 'esc_html', $safe_text, $text );
Вообще этот фильтр-хук очень похож на attribute_escape внутри функции esc_attr() и на esc_textarea внутри функции esc_textarea(), поэтому рекомендую посмотреть примеры там, кроме того, если вы не совсем умеете работать с фильтрами в WordPress, то это руководство для вас.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Здравствуйте! Спасибо за статью. Все понятно, кроме одного момента. Для чего использовать esc_html() для только одного слова без каких либо тегов? Это код со страницы WP 404.php
Здравствуйте,
Спасибо за классный вопрос!
Да, в данном примере это выглядит как обычное слово, но, как вы помните, _e() и производная от неё esc_html_e() – функции локализации, а это значит, что когда кто-то будет переводить эту строку "Most Used Categories", то он может перевести её как захочет и во что захочет, в том числе воткнув от себя какие-то теги.
И тот человек, который писал код вашего 404.php исходил из принципа – "никому нельзя доверять", что в принципе имеет смысл при написании безопасного кода.
Благодарю за оперативный ответ!)