Переписали wp_kses() — что это значит для сайтов
Обсуждали с коллегами статью про переработку wp_kses() в WordPress — и понял, что это не просто техническое обновление, а смена парадигмы в обработке HTML. Старая система, устаревшая с эпохи ручного ввода кода, теперь заменяется на современный парсер, который строит HTML по структуре, а не по тексту.
Суть в том, что wp_kses() — функция, отвечающая за очистку HTML из пользовательского ввода — теперь переписана на основе стандартного HTML API. Это значит, что она не будет больше «кусать» текст, принимая за теги символы вроде 5yo, как раньше. Теперь такие фрагменты сохранятся, а амперсанды в URL-параметрах — не будут непредсказуемо расшифровываться. Устаревшие теги с self-closing флагами, как , теперь будут нормализованы в , а атрибуты — всегда в двойных кавычках.
Считаю, что это важный шаг в сторону предсказуемости. Раньше разные плагины и темы могли вести себя по-разному из-за непонятных особенностей старой реализации. Теперь — одинаково. Но на мой взгляд, не стоит торопиться с переходом: даже если новая версия безопаснее и быстрее, она может сломать код, который полагается на старые «странности». Поэтому пока оставлю всё как есть — проверяю, как ведут себя сайты у клиентов, и смотрю, что будет в 7.2.0.
Уже начал включать опцию отключения нового парсера у тех, кто использует кастомные фильтры. Пока не вижу срочной нужды обновлять — но в план на неделю добавил проверку, как поведут себя сайты с включённым новым wp_kses(). Главное — не дать поводу для сбоя, пока не понятно, как поведут себя все зависимости.