WordPress как на ладони
wordpress jino

esc_attr() WP 2.8.0

Преобразует знаки <, >, &, ", ' в html сущности. Не создает двойного преобразования.

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

Используется в: esc_attr_e(), esc_attr__().
Работает на основе: _wp_specialchars()
Хуки из функции:
Возвращает

Строку. Очищенную для использования в атрибуте HTML тега строку.

Использование

<?php echo esc_attr( $text ) ?>
$text(строка) (обязательный)
Текст, который нужно преобразовать.
По умолчанию: нет

Примеры

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

$text = "<span>(тег) '(кавычка) \"(двойная кавычка) &(амперсанд)";
echo esc_attr( $text )

// Вернет:
// &lt;span&gt;(тег) &#039;(кавычка) &quot;(двойная кавычка) &amp;(амперсанд)

#2 Пример учета двойного кодирования:

$text = "&gt; and &amp;";
echo esc_attr( $text );         // &gt; and &amp;amp;
echo htmlspecialchars( $text ); // &amp;gt; and &amp;amp;

#3 Пример очистки данных на выходе

<?php $fname = ( isset( $_POST['fname'] ) ) ? $_POST['fname'] : ''; ?>
<input type="text" name="fname" value="<?php echo esc_attr( $fname ); ?>">

Код esc attr: wp-includes/formatting.php WP 4.8.2

<?php
function esc_attr( $text ) {
	$safe_text = wp_check_invalid_utf8( $text );
	$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
	/**
	 * Filters a string cleaned and escaped for output in an HTML attribute.
	 *
	 * Text passed to esc_attr() is stripped of invalid or special characters
	 * before output.
	 *
	 * @since 2.0.6
	 *
	 * @param string $safe_text The text after it has been escaped.
 	 * @param string $text      The text prior to being escaped.
	 */
	return apply_filters( 'attribute_escape', $safe_text, $text );
}

Cвязанные функции

Из метки: esc_ (очистка валидация)

Еще из раздела: Очистка данных

esc_attr 10 комментариев
  • Виталий @

    Здравствуйте! Подскажите, пожалуйста, как потом преобразовать HTML-сущности обратно в знаки при выводе?

    Ответить3.5 года назад #
    • Виталий @

      Нашел ответ. Возможно, это детский сад, но вдруг пригодится кому-нибудь.
      Функция html_entity_decode() преобразует HTML сущности в символы.

      Ответить3.5 года назад #
  • Максим

    Здравствуйте! Подскажите, а есть возможность отменить форматирование внутри этой функции? Так как эта функция часто используется в движке, можно было конечно подправить файлы движка и в нужном месте сделать вывод без нее, но не хотелось бы трогать файлы движка, а если и трогать, то после обновления CMS, все равно все надо будет менять заново)

    Ответить3 года назад #
    • Kama4486

      Отменять работу этой функции не рекомендую. В некоторых случаях где это необходимо можно использовать фильтр attribute_escape:

      function my_funcion( $text, $original_text ){
      	// проверка, точно ли нужно оставить оригинал текста
      	// например, оставим оригинал для страниц постов
      	if( $post->post_type == 'post' )
      		return $save_text;
      
      	return $original_text;
      }
      add_filter('attribute_escape', 'my_funcion', 10, 2);
      Ответить3 года назад #
  • campusboy1832 cайт: wp-plus.ru

    Учусь делать настройки в теме и сохраняю значения поля кодом:

    $num_elements = esc_attr($_POST["num_elements"]);
    update_option("theme_name_num_elements", $num_elements);

    В этом поле нужно вводить только цифры, будет ли правильным заменить esc_attr на int. И вообще, способно ли int обезопасить от всякой чернухи, когда в поле надо вводить только цифры?

    Ответить2.1 года назад #
    • Kama4486

      Да (int), intval() - отличное средство, быстрое и надежное! Если переменная - число, пользуйся ими, забудь про esc_*

      2
      Ответить2.1 года назад #
  • Глеб

    Насколько я понимаю то в примере #2 есть ошибка (не критично, но может некоторых сбить с толку). В последней строке последний знак амперсанда лишний.

Здравствуйте, !

Ваш комментарий