Кто может объяснить случаи использования esc_html?

3 нояб. 2016 г., 00:00:41
Просмотры: 18.7K
Голосов: 6

Я изучаю стартовую тему _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 просто излишне осторожна во всем?

Спасибо

5
Комментарии

Я думаю, они используют это для интернационализации темы

user3635808 user3635808
3 нояб. 2016 г. 00:07:05

@user3635808 Для перевода? Это имеет больше смысла. Я рассматривал это только с точки зрения безопасности и не подумал о других вариантах

John_911 John_911
3 нояб. 2016 г. 00:12:00

Да, для перевода.

user3635808 user3635808
3 нояб. 2016 г. 00:12:30

@user3635808 Ооо, я даже не заметил, что искал esc_html вместо esc_html__ - обрати внимание на двойное подчеркивание в конце.

John_911 John_911
3 нояб. 2016 г. 00:15:32

@user3635808 Это может стать хорошим ответом, если добавить немного исследований и примеров :)

Howdy_McGee Howdy_McGee
3 нояб. 2016 г. 00:18:28
Все ответы на вопрос 4
2
esc_html__( string $text, string $domain = 'default' )

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

https://codex.wordpress.org/Function_Reference/esc_html_2

3 нояб. 2016 г. 01:41:10
Комментарии

Это должен быть принятый ответ.

Mac Mac
22 нояб. 2017 г. 20:44:30

@Mac, да, этот ответ следует принять. esc_html__ запрещает использование HTML в переводимых строках.

Andrei Surdu Andrei Surdu
22 нояб. 2017 г. 20:50:15
1

esc_html() выполняет две функции:

  1. Проверяет строку на наличие недопустимых UTF8 символов.
  2. Преобразует специальные символы в HTML-сущности, а именно обрабатывает: &, <, >, “ и ‘.

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

3 нояб. 2016 г. 00:46:15
Комментарии

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

amieiro amieiro
10 окт. 2021 г. 07:50:42
0

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

22 нояб. 2017 г. 20:43:54
1

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

Принятый ответ действительно неверен.

6 июн. 2018 г. 06:57:27
Комментарии

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

Mark Kaplun Mark Kaplun
6 июн. 2018 г. 07:11:51