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

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

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

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

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

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

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