Какая разница между esc_html, esc_attr, esc_html_e, _e() и другими?

29.01.2021

Уже давно не давал мне покоя вопрос в чем разница между функциями _e() и esc_html_e… Но я везде использовал _e() и не парился, пока не столкнулся с необходимостью использовать в шаблоне esc_html_e(), тогда то и пришлось разбираться что к чему.

Все данные взяты из документации wp-includes/l10.php.

Собственно разберемся как работают функции, которые используются для локализации в CMS WordPress.

Пример использования:

<?php _e('Close menu', 'dc'); ?>

где

_e() – функция локализации для перевода строки,

‘Close menu’ – строка для перевода,

‘dc’ – домен (идентификатор) по которому получаем перевод.

На выходе мы получим фразу Close menu или ее перевод, если локализация настроена на сайте.


Функция __()

Пример:

<?php echo __('Close menu', 'dc'); ?>

Функция возвращает результат перевода строки.

Если в строке будут html-теги, то в переводе они останутся без изменения.

<?php echo __('<p style="color: red;">Close menu</p>', 'dc'); ?>

Вернет:

<p style="color: red;">Close menu</p>

Результат на фронте:

Close menu

Документация:

// Retrieve the translation of $text.

function __( $text, $domain = 'default' ) {
  return translate( $text, $domain );
}

Функция esc_attr__()

Используется для атрибутов html тегов. Переводит указанную строку и обрабатывает её функцией esc_attr().

Функция esc_attr() предназначена для фильтрации строки, которую планируется выводить в значениях html атрибутов.

Кодирует < > & " ' (больше, меньше, амперсанд, кавычки двойные и одинарные). Не создает двойного преобразования.

Можно использовать в качестве фильтра выводимых данных для <input> полей формы:

<input type="text" value="<?php echo esc_attr__( 'Default value', 'dc' ) ?>">

Если в строке будут символы < > & " ' то они будут преобразованы в:

< > & &quot; &#039;

Например:

<?php echo esc_attr__('You can use <s> <em> <strong>', 'dc'); ?>

В исходном коде получим:

You can use <s> <em> <strong>

А в браузере символы отобразятся в соответствии с кодировкой:

You can use <s> <em> <strong>

Документация:

// Retrieve the translation of $text and escapes it for safe use in an attribute.

function esc_attr__( $text, $domain = 'default' ) {
  return esc_attr( translate( $text, $domain ) );
}

Функция esc_html__()

Документация:

// Retrieve the translation of $text and escapes it for safe use in HTML output.

function esc_html__( $text, $domain = 'default' ) {
  return esc_html( translate( $text, $domain ) );
}

Функция _e()

Документация:

// Display translated text.

function _e( $text, $domain = 'default' ) {
  echo translate( $text, $domain );
}

Функция esc_attr_e()

Документация:

// Display translated text.

function esc_attr_e( $text, $domain = 'default' ) {
  echo esc_attr( translate( $text, $domain ) );
}

Функция esc_html_e()

Документация:

// Display translated text that has been escaped for safe use in HTML output.

function esc_html_e( $text, $domain = 'default' ) {
  echo esc_html( translate( $text, $domain ) );
}

Функция _x()

Документация:

// Retrieve translated string with gettext context.

function _x( $text, $context, $domain = 'default' ) {
  return translate_with_gettext_context( $text, $context, $domain );
}

Функция _ex()

Документация:

// Display translated string with gettext context.

function _ex( $text, $context, $domain = 'default' ) {
  echo _x( $text, $context, $domain );
}

Функция esc_attr_x()

Документация:

// Translate string with gettext context, and escapes it for safe use in an attribute.

function esc_attr_x( $text, $context, $domain = 'default' ) {
  return esc_attr( translate_with_gettext_context( $text, $context, $domain ) );
}

Функция esc_html_x()

Документация:

// Translate string with gettext context, and escapes it for safe use in HTML output.

function esc_html_x( $text, $context, $domain = 'default' ) {
  return esc_html( translate_with_gettext_context( $text, $context, $domain ) );
}

https://wordpress.stackexchange.com/questions/321307/what-s-the-difference-between-esc-html-esc-attr-esc-html-e-and-so-on

https://stackoverflow.com/questions/38662525/when-to-use-and-esc-html-e

https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/l10n.php#L0

function __( $text, $domain = 'default' ) {
    return translate( $text, $domain );
}

function esc_html_e( $text, $domain = 'default' ) {
    echo esc_html( translate( $text, $domain ) );
}

Полезная инфа:

Оставить комментарий