Когда использовать esc_html и когда sanitize_text_field?

20 апр. 2014 г., 13:36:45
Просмотры: 21.7K
Голосов: 15

Похоже, что они выполняют почти одинаковую работу. Итак...

Когда следует использовать esc_html() вместо sanitize_text_field()?

0
Все ответы на вопрос 1
6
25

esc_html() является более или менее безпотерьной функцией — она просто преобразует HTML-разметку в закодированный видимый текст, чтобы он не интерпретировался браузером как разметка.

Семантически это экранирование, поэтому она предназначена для безопасного вывода на страницу.

sanitize_text_field(), однако, фактически удаляет всю HTML-разметку, а также лишние пробелы. Она оставляет только обычный текст.

Семантически это санитизация, поэтому она предназначена для безопасного сохранения вводимых данных.

20 апр. 2014 г. 15:24:51
Комментарии

не лучше ли использовать esc_html и для вывода, и для сохранения? Я все равно не буду отображать разметку.. так когда тогда использовать sanitize_text_field()?

yeahman yeahman
20 апр. 2014 г. 17:15:20

@yeahman "лучше" в каком смысле? Они выполняют совершенно разные функции. Удаление разметки обычно используется для случаев, когда разметка не ожидается, например, в форме для ввода имени.

Rarst Rarst
20 апр. 2014 г. 17:37:38

Я имею в виду, что сохраняется то, что видит и вводит пользователь... как ты сказал, это без потерь.. (например, если он введет "тег <head> — это место, куда следует подключать css-файлы", он ожидает увидеть <head> в своем посте).

Для поля имени я бы контролировал ввод через валидацию; разве это не более подходящий вариант?

yeahman yeahman
20 апр. 2014 г. 18:40:24

Меня интересуют различия между sanitize_text_field() и strip_tags

myol myol
29 янв. 2015 г. 16:24:17

Если я не ошибаюсь, strip_tags используется внутри sanitize_text_field()

yeahman yeahman
23 февр. 2016 г. 21:47:59

Если вы помещаете контент в JSON-закодированный массив, и значения массива содержат " (что ОЧЕНЬ вероятно, если ваш контент, например, данные поста), то - хотя sanitize_text_field() БЫЛ бы правильным выбором, так как вы СОХРАНЯЕТЕ данные, он не сработает. Вам нужно использовать esc_html, который кодирует ", и таким образом, в момент ДЕКОДИРОВАНИЯ вашего JSON, не нарушит возвращаемое значение.

User User
10 мар. 2023 г. 05:27:22
Показать остальные 1 комментариев