Зачем экранировать HTML
HTML-символы <, >, &, " имеют специальное значение. Если вставить их в код напрямую — браузер интерпретирует их как HTML, а не как текст. Экранирование заменяет их на HTML-сущности: <, >, &, ".
Именованные vs числовые сущности
- Именованные:
&,©,—— читаемые, но поддерживаются не везде - Числовые:
&,©,—— универсальные, работают в любом HTML-парсере
Часто задаваемые вопросы
Зачем нужно экранирование для безопасности?
XSS (Cross-Site Scripting) — самая распространённая уязвимость. Если выводить пользовательский ввод без экранирования, злоумышленник может вставить <script>…</script> и выполнить свой код в браузере других пользователей. Всегда экранируйте данные при выводе в HTML.
Чем HTML encode отличается от URL encode?
HTML encode заменяет спецсимволы HTML-сущностями (&, <). URL encode заменяет символы %HH-кодами (%26, %3C) — для безопасной передачи в URL. Применяйте нужный метод в зависимости от контекста: HTML-атрибут или URL-параметр.
Как декодировать HTML-сущности в PHP?
html_entity_decode($str, ENT_QUOTES, «UTF-8») — декодирует именованные и числовые сущности. htmlspecialchars_decode() — только базовые 5 символов. strip_tags() — удаляет HTML-теги полностью.
Нужно ли экранировать HTML в JSON?
Нет — JSON использует другое экранирование: обратный слэш («). Но если JSON-строка будет вставлена в HTML-атрибут, её нужно сначала HTML-экранировать. В PHP: json_encode($data, JSON_HEX_TAG | JSON_HEX_AMP) экранирует оба контекста одновременно.