Кодирование
HTML Entities Encode/Decode
Кодирование и декодирование HTML-сущностей — безопасное отображение спецсимволов на странице.
HTML-сущности — это способ записать символы, которые иначе сломали бы разметку (<, >, &) или не имеют клавиши на клавиатуре, в безопасном текстовом виде вроде < или &. Инструмент кодирует и декодирует такие сущности прямо в браузере.
Как пользоваться
- Кодирование: вставьте текст — символы <, >, &, кавычки и другие спецсимволы заменяются на соответствующие сущности.
- Декодирование: вставьте HTML с сущностями (&, © и т.д.), чтобы увидеть обычный текст.
- Поддерживаются как именованные сущности (&), так и числовые (& или &).
Типичные сценарии
- Безопасное отображение текста пользователя (комментария, сообщения) на странице без риска сломать разметку или вставить скрипт.
- Вставка примеров HTML-кода в статью или документацию так, чтобы браузер показал их как текст, а не отрендерил.
- Раскодирование содержимого, скопированного с другого сайта, где символы пришли уже закодированными.
Что стоит помнить
Экранирование HTML-сущностей защищает только от XSS через текстовое содержимое страницы — оно не защищает JavaScript-контекст (innerHTML, eval) или атрибуты href/src с невалидированными URL.
Кодировать нужно именно там, где текст вставляется в HTML, а не заранее при сохранении в базу — иначе данные искажаются при повторном использовании не в HTML-контексте.
Статья об этом инструменте: HTML Entities: как безопасно выводить спецсимволы на странице
Часто задаваемые вопросы
Зачем кодировать текст в HTML-сущности?
Это защищает от поломки разметки и XSS, когда пользовательский текст выводится на странице: символы вроде <, > и & в незакодированном виде браузер может воспринять как часть HTML-тегов.
В чём разница между именованными и числовыми сущностями?
Именованная сущность — это мнемоническое обозначение вроде &, а числовая ссылается на код символа: десятичная & или шестнадцатеричная &. Все три формы означают один и тот же символ, но именованные поддерживаются не для всех символов, а числовые — всегда.
Что означает режим «Все символы»?
В отличие от режима «Основные», который кодирует только символы, значимые для разметки (<, >, &, кавычки), режим «Все символы» переводит в сущности вообще всё, что имеет именованный эквивалент, включая не-ASCII символы.
Нужно ли экранировать текст в атрибуте иначе, чем в теле страницы?
Основные символы (<, >, &) экранируют одинаково, но внутри атрибута в кавычках дополнительно критично экранировать именно тот тип кавычек, которым ограничен атрибут, — иначе значение «разорвётся» раньше, чем ожидалось.
Защищает ли HTML-экранирование от всех видов XSS?
Нет. Оно закрывает самый распространённый вектор — вставку текста в HTML-содержимое, но не защищает от XSS через JavaScript-контекст (например, innerHTML с последующим выполнением кода) или невалидированные URL в href/src.