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

Экранируйте специальные символы в HTML-сущности или раскодируйте сущности обратно в обычный текст прямо во время ввода.

Кодировать все не-ASCII символы
Также экранирует буквы с диакритикой и эмодзи, а не только < > & " '.

Зачем нужны HTML-сущности

Некоторые символы зарезервированы самим HTML.

Символы вроде <, > и & имеют особое значение в HTML-разметке; ввод их напрямую в содержимом страницы может сломать страницу или, что хуже, позволить интерпретировать пользовательский ввод как исполняемую разметку. Кодирование их в сущности вроде &lt; безопасно отображает символ как обычный текст.

Именованные vs числовые сущности

&amp; и &#38; оба декодируются в один и тот же амперсанд; именованные сущности существуют для распространённых символов, а числовые сущности (десятичные или шестнадцатеричные) могут представлять любой символ Юникода. Этот инструмент декодирует обе формы.

Как это работает

Кодирование — это простая замена: регулярное выражение заменяет пять зарезервированных в HTML символов (&, <, >, ", ') на их сущности. Опция «кодировать все не-ASCII символы» идёт дальше и преобразует каждый символ за пределами диапазона ASCII в числовую ссылку с помощью codePointAt, что полезно, когда вывод должен пройти через ASCII-only канал, например старую систему email-шаблонов или конфигурационный файл, портящий UTF-8.

Декодирование использует приём, который стоит знать: строка присваивается свойству innerHTML отсоединённого элемента <textarea>, а затем считывается обратно из его .value. Это перекладывает работу на собственный HTML-парсер браузера, который уже знает более 2000 именованных сущностей, а также все десятичные и шестнадцатеричные числовые формы, поэтому инструменту не нужна таблица соответствий, которая может устареть. Именно поэтому здесь безопасно декодировать недоверенный ввод: содержимое textarea всегда обрабатывается как обычный текст, поэтому декодированный &lt;script&gt; становится текстом внутри тега script, и ничего никогда не выполняется.

Оба направления выполняются при каждом нажатии клавиши в JavaScript этой страницы. Откройте вкладку Network в DevTools во время ввода: запросов нет, ваша разметка никогда не покидает браузер.