Когда использовать esc_html и когда sanitize_text_field?
Похоже, что они выполняют почти одинаковую работу. Итак...
Когда следует использовать esc_html() вместо sanitize_text_field()?
esc_html() является более или менее безпотерьной функцией — она просто преобразует HTML-разметку в закодированный видимый текст, чтобы он не интерпретировался браузером как разметка.
Семантически это экранирование, поэтому она предназначена для безопасного вывода на страницу.
sanitize_text_field(), однако, фактически удаляет всю HTML-разметку, а также лишние пробелы. Она оставляет только обычный текст.
Семантически это санитизация, поэтому она предназначена для безопасного сохранения вводимых данных.
не лучше ли использовать esc_html и для вывода, и для сохранения? Я все равно не буду отображать разметку.. так когда тогда использовать sanitize_text_field()?
yeahman
@yeahman "лучше" в каком смысле? Они выполняют совершенно разные функции. Удаление разметки обычно используется для случаев, когда разметка не ожидается, например, в форме для ввода имени.
Rarst
Я имею в виду, что сохраняется то, что видит и вводит пользователь... как ты сказал, это без потерь.. (например, если он введет "тег <head> — это место, куда следует подключать css-файлы", он ожидает увидеть <head> в своем посте).
Для поля имени я бы контролировал ввод через валидацию; разве это не более подходящий вариант?
yeahman
Если я не ошибаюсь, strip_tags используется внутри sanitize_text_field()
yeahman
Если вы помещаете контент в JSON-закодированный массив, и значения массива содержат " (что ОЧЕНЬ вероятно, если ваш контент, например, данные поста), то - хотя sanitize_text_field() БЫЛ бы правильным выбором, так как вы СОХРАНЯЕТЕ данные, он не сработает. Вам нужно использовать esc_html, который кодирует ", и таким образом, в момент ДЕКОДИРОВАНИЯ вашего JSON, не нарушит возвращаемое значение.
User