Кто может объяснить случаи использования esc_html?
Я изучаю стартовую тему _s (underscores) и вижу, что там почти везде используется esc_html. Вот пример из functions.php:
register_nav_menus( array(
'primary' => esc_html__( 'Primary', '_s' ),
) );
register_sidebar( array(
'name' => esc_html__( 'Sidebar', '_s' ),
'description' => esc_html__( 'Add widgets here.', '_s' ),
'id' => 'sidebar-1',
'before_widget' => '<section id="%1$s" class="widget %2$s">',
'after_widget' => '</section>',
'before_title' => '<h2 class="widget-title">',
'after_title' => '</h2>',
) );
Мое текущее понимание esc_html - использовать ее при выводе данных из базы данных или пользовательского ввода.
Зачем экранировать названия меню и сайдбара?
Они доступны только тем, у кого есть доступ к php-файлам, и, кажется, не сохраняются в БД. Я проверил базу данных и не нашел ничего связанного с этими названиями - поправьте, если я ошибаюсь.
Тема underscores просто излишне осторожна во всем?
Спасибо

esc_html__( string $text, string $domain = 'default' )
Получает перевод строки $text и экранирует её для безопасного использования в HTML-выводе.
Таким образом, esc_html__()
используется как для интернационализации, так и в целях безопасности.

esc_html() выполняет две функции:
- Проверяет строку на наличие недопустимых UTF8 символов.
- Преобразует специальные символы в HTML-сущности, а именно обрабатывает: &, <, >, “ и ‘.
Использование этой функции вместо __()
, _e
и других функций интернационализации защищает ваш сайт от возможных ошибок, которые могут возникнуть из-за невнимательных переводчиков. Они могут использовать текст, содержащий (1) недопустимые UTF8 символы или (2) нежелательный HTML-код. Поверьте, многие переводчики соблазнятся использовать 'красивые' HTML-теги, такие как <i>
, <b>
и т.д., а что ещё хуже — могут закрыть их неправильно.

Если вы посмотрите исходный код esc_html__()
, то увидите, что эта функция просто вызывает функцию esc_html()
с переведённой строкой. Поэтому в этой статье объясняются преимущества экранирования и почему разработчики экранировали эти строки.

Здесь всё не так однозначно. Вопрос автора касается функции esc_html(), но в его коде явно используется esc_html__(). Это не одно и то же. Принятый ответ неверен: он ссылается на esc_html(), которая отвечает за безопасное экранирование HTML-блоков. Ответ Kanon Chowdhury должен быть принятым, поскольку код автора связан с аспектами интернационализации (I18n) в стартовой теме WordPress Underscores (где используется функция esc_html__()).

esc_html() и esc_html__() — это НЕ одинаковые функции. Основное различие в том, что esc_html() принимает только одну строку и возвращает экранированную HTML-строку. В то время как esc_html__() принимает 2 строки в качестве параметров и возвращает переведённую и экранированную строку.
Принятый ответ действительно неверен.

Если вы считаете, что ответ неверен (а не просто бесполезен), вы можете поставить ему минус. Статус принятого ответа лишь означает, что автор вопроса считает его достаточно хорошим для своего вопроса, но не указывает на качество или даже общую правильность — это определяется количеством плюсов.
