Что такое Кодировщик/декодировщик HTML-сущностей?

Кодировщик/декодировщик HTML-сущностей преобразует специальные символы, такие как <, >, & и кавычки, в их HTML-эквиваленты (и обратно). Это предотвращает XSS-уязвимости при встраивании пользовательского контента в HTML и устраняет проблемы с отображением специальных символов.

Кодировщик преобразует символы вроде <, >, &, ", ' и любой кодпойнт Unicode в именованные сущности (&amp;, &lt;), десятичные числовые ссылки (&#38;) или шестнадцатеричные числовые ссылки (&#x26;). Переключатель охвата позволяет кодировать только пять зарезервированных символов, все специальные символы или каждый не-ASCII символ. Декодирование обращает любой из трёх форматов. Полезно для очистки пользовательского ввода перед выводом в HTML или для восстановления текста из экспортов HTML-писем.

Как использовать

  1. Шаг 1 — Вставьте текст, содержащий специальные символы или HTML-сущности.
  2. Шаг 2 — Выберите «Кодировать» для преобразования символов в сущности или «Декодировать» для обратного преобразования.
  3. Шаг 3 — Выберите формат (именованный, десятичный или шестнадцатеричный) и охват для контроля интенсивности кодирования.

Когда использовать

  • Вставка примеров кода в CMS, чтобы < и > не съело как HTML-теги.
  • Очистка текста из HTML-писем или результатов парсинга, где остались &mdash; и &nbsp;.
  • Экранирование пользовательского ввода перед вставкой в серверный шаблон против XSS.

Результат

Вам нужно отобразить фрагмент кода <div class=hero> внутри HTML-абзаца. Закодируйте его в &lt;div class=&quot;hero&quot;&gt;, чтобы устройство отображал текст, а не интерпретировал его как разметку.

Частые вопросы

В чём разница между именованными и числовыми сущностями?
Именованные — читаемые сокращения (&copy; для ©). Числовые используют точку Unicode (&#169; или &#xA9;). Числовые покрывают любой Unicode; именованные ограничены примерно 250 символами, описанными в спецификации HTML5.
Нужно ли кодировать все спецсимволы или только часть?
В HTML-теле достаточно закодировать & < > и кавычку, использованную в значениях атрибутов. В контекстах JavaScript и URL правила другие. Переключатель Охвата предлагает три варианта: Только зарезервированные — пять критических для XSS символов, Все специальные — типографика плюс зарезервированные, Все не-ASCII — самое широкое покрытие.
Не сломает ли кодирование копипасту или скринридеры?
Нет. Браузер декодирует сущности до отрисовки, пользователь видит и копирует исходный символ. Скринридеры тоже получают декодированную форму. Сущности — это транспортный формат разметки, а не финальный вывод.
Достаточно ли HTML-кодирования, чтобы остановить XSS?
Для текста в теле HTML — да. В атрибутах нужно ещё взять значение в кавычки и закодировать сам символ кавычки. В JavaScript, CSS и URL свои правила экранирования. Кодирование — первый слой, а не вся защита.
Почему одни сущности начинаются с &#x, а другие — с &#?
&#x — шестнадцатеричная точка, &# — десятичная. Оба варианта указывают на один и тот же символ: &#xA9; и &#169; — это ©. Шестнадцатеричная форма совпадает с записью U+ из Unicode и короче для высоких кодов.

Похожие инструменты