ToolActToolAct

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

Онлайн-конвертация символов HTML-сущностей, кодирование и декодирование, эффективная защита от XSS-атак

Ввод текста
Символов: 0
Байт: 0
Результат
Символов: 0
Байт: 0

Выберите способ конвертации

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

Кодирование HTML-сущностей — это механизм преобразования специальных символов в ссылки на сущности HTML. В HTML некоторые символы имеют особое значение (например, <, >, &), и если их нужно отобразить как есть, используется кодирование сущностей. Есть две формы: именованные сущности (например, &lt;) и числовые сущности (например, &#60;). Именованные более читаемы, числовые могут представлять любой символ Unicode. HTML-encoding важен, когда текст нужно вставить в HTML без интерпретации как разметки. Символы <, >, &, кавычки и апострофы иначе могут изменить теги, атрибуты или entities. Инструмент полезен для примеров, templates, CMS-контента и отладки XSS-проблем. Контекст решает многое: HTML body, атрибуты, URL, JavaScript и CSS требуют разных правил escaping, поэтому результат нужно применять в правильном месте.

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

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

  1. Введите или вставьте текст для преобразования в левое поле ввода
  2. Нажмите нужную кнопку кодирования или декодирования
  3. Результат автоматически отобразится справа
  4. Нажмите «Копировать», чтобы скопировать результат в буфер обмена

Методы преобразования

HTML Entity EncodeПреобразует < > & " ' в именованные сущности, подходит для защиты от XSS
HTML Entity DecodeВосстанавливает именованные сущности в исходные символы
Numeric Entity EncodeПреобразует спецсимволы в числовую форму сущностей (например, &#60;)
Full EncodeКодирует все не-ASCII символы, подходит для интернационализации
Full DecodeВосстанавливает все формы HTML-сущностей

Горячие клавиши

  • Ctrl + EHTML Entity Encode
  • Ctrl + DHTML Entity Decode

Советы по кодированию

  • Кодируйте видимый пользователю текст перед вставкой в HTML-код, особенно если он может содержать угловые скобки, кавычки или амперсанды.
  • Кодирование HTML-сущностей помогает предотвратить интерпретацию разметки, но это лишь одна часть защиты от XSS и не заменяет контекстное экранирование вывода.

Применение

Экранирование небезопасных символов перед вставкой текста в HTMLКодируйте амперсанды, угловые скобки, кавычки и апострофы в именованные сущности, чтобы вставленный текст корректно отображался в разметке, не превращаясь в теги или атрибуты. Исходная строка никуда не передаётся — каждая подстановка выполняется локально над введённым значением, поэтому внутренняя документация, неопубликованный текст или конфиденциальные фрагменты можно обработать без отправки на удалённый сервис.
Декодирование сущностей из скопированного исходного кода страницыПереключитесь в режим декодирования сущностей, числового или полного декодирования, чтобы превратить &amp;lt;, &#60; и другие закодированные фрагменты обратно в читаемый текст при отладке или очистке контента. Декодирование использует DOM-парсер браузера на отсоединённом узле — входные данные не попадают в сетевой запрос, а восстановленная строка остаётся в той же вкладке.
Выбор между минимальным и полным кодированиемИспользуйте режимы сущностей или числового кодирования только для критичных HTML-символов, либо полное кодирование, когда не-ASCII символы тоже нужны в виде числовых ссылок для устаревших систем. Выберите режим, соответствующий ожидаемому набору сущностей целевой системы — например, именованные сущности для читаемого HTML, числовые — для старых CMS-шаблонов, полное кодирование — для ASCII-каналов передачи.
Кодирование амперсандов и угловых скобок для безопасной вставки в CMSПропустите фрагмент кода или шаблонную строку через режим кодирования, чтобы &, <, > и кавычки стали сущностями &amp; &lt; &gt; перед вставкой в редактор, email-шаблон или поле статического сайта, которое повторно парсит ввод как HTML. Поскольку кодирование — это локальный regex-проход, исходный фрагмент остаётся на странице до явного копирования результата, что удобно при работе с конфиденциальными примерами.
Декодирование JSON внутри HTML-атрибутов при инспекцииПереключитесь в числовое или полное декодирование, чтобы превратить &#123; &#x7B; &quot; и подобные последовательности в символы при чтении закодированного JSON, webhook-данных или строк атрибутов из сохранённого исходного кода страницы. Декодированный JSON остаётся в области вывода справа — ничего не отправляется на парсер, поэтому фрагменты данных из продакшен-логов можно проверить, не покидая браузер.

Технический принцип

HTML использует два вида символьных ссылок, определённых WHATWG HTML Living Standard. Именованные символьные ссылки начинаются с & и заканчиваются на ;, берутся из таблицы entities.json, поддерживаемой WHATWG (около 2231 имени в текущей спецификации, включая устаревшие алиасы без завершающей точки с запятой, такие как &amp без ;). Числовые символьные ссылки используют кодовые точки Unicode в десятичном (&#60;) или шестнадцатеричном (&#x3C;) формате и могут кодировать любой символ от U+0000 до U+10FFFF, за исключением диапазона суррогатов U+D800-U+DFFF. Пять символов, которые ОБЯЗАТЕЛЬНО должны быть экранированы для сохранения синтаксической безопасности HTML: & (&amp;), < (&lt;), > (&gt;), " (&quot;) и ' (&#39;); обратите внимание, что &apos; является частью XML и HTML5, но НЕ допустим в HTML 4.01, поэтому OWASP рекомендует числовую форму &#39; для атрибутов, разделённых двойными кавычками, которые должны корректно обрабатываться устаревшими парсерами. Кодирование в этом инструменте представляет собой однопроходную замену: порядок важен, поскольку & должен экранироваться первым, иначе префиксы сущностей, вставленные для < и >, будут повторно экранированы в &amp;lt;. Декодирование использует парсер HTML браузера, присваивая входные данные innerHTML отсоединённого элемента и считывая textContent обратно; это направляет выполнение к официальному конечному автомату токенизатора в спецификации HTML (разделы 13.2.5.72-80), который корректно обрабатывает именованные, десятичные и шестнадцатеричные формы, включая некорректные входные данные, такие как отсутствующие точки с запятой. Числовое кодирование для режима полного кодирования обходит строку кодовую точку за кодовой точкой, используя String.prototype.codePointAt для обработки астральных символов, занимающих суррогатную пару UTF-16 (например, эмодзи U+1F600 становится &#128512;, а не два суррогатных значения). Предотвращение XSS требует контекстно-зависимого экранирования, а не просто кодирования HTML-сущностей. OWASP Cross-Site Scripting Prevention Cheat Sheet определяет пять различных контекстов: тело HTML, атрибут HTML (в кавычках и без), данные JavaScript (внутри <script>), CSS и URL. Экранирование HTML-сущностей покрывает только контексты 1 и 2. Для контекстов JavaScript следует использовать \xHH или \uHHHH через JSON.stringify, контексты URL требуют encodeURIComponent (RFC 3986 percent-encoding), а инлайн-обработчики событий объединяют правила, поскольку их значения проходят через парсеры и HTML, и JavaScript. Заголовок Content-Security-Policy с script-src 'self' и удалённым 'unsafe-inline' — это современный уровень защиты в глубине, который перехватывает ошибки экранирования, а DOM-приёмники, такие как innerHTML, document.write и setAttribute('on*', ...), следует заменить на textContent или управляемые фреймворком привязки (JSX в React, шаблоны с двойными фигурными скобками в Vue), которые экранируют по умолчанию.

  • Именованные ссылки: около 2231 записи в WHATWG entities.json; пять обязательных к экранированию имён — &amp; &lt; &gt; &quot; &apos; (&apos; только для HTML5/XML, не для HTML 4.01)
  • Числовые ссылки: десятичные &#DDDDD; и шестнадцатеричные &#xHHHH; покрывают U+0000 до U+10FFFF; суррогаты U+D800-U+DFFF и U+0000 NULL недопустимы по спецификации HTML
  • Порядок экранирования: & должен заменяться первым, иначе вставленный префикс &amp; для последующих экранирований будет дважды закодирован; кодирование имеет сложность O(n) с таблицей из 5 элементов
  • Декодирование через DOMParser: присвоение innerHTML отсоединённого элемента вызывает токенизатор спецификации HTML (Character reference state, разделы 13.2.5.72-80), который обрабатывает устаревшие сущности без завершающих точек с запятой
  • Обработка астральных символов: используйте String.prototype.codePointAt и итерацию for...of, чтобы эмодзи и символы расширения CJK B (U+10000+) генерировали один &#NNNNN;, а не две суррогатные ссылки
  • Контекстно-зависимое экранирование (правило #0 OWASP XSS Prevention Cheat Sheet): тело HTML, атрибут HTML, JavaScript, CSS и URL требуют различных способов экранирования; только HTML-сущности не останавливают XSS в приёмниках JS или URL
  • Защита в глубину: Content-Security-Policy script-src 'self' (по аналогии с RFC), очистка DOMPurify по списку разрешённых для редактируемого контента и предпочтение textContent/innerText вместо innerHTML в обычном DOM-коде

Примеры

Базовое кодирование элемента

Вход:  <script>alert(1)</script>
Выход: &lt;script&gt;alert(1)&lt;/script&gt;
Применение: предотвратить интерпретацию браузером текста как реального тега при отображении пользовательского контента

Кодирование значения атрибута

Вход:  <div title="Hello & world">
Выход: &lt;div title=&quot;Hello &amp; world&quot;&gt;
Примечание: кавычки и амперсанд внутри атрибута кодируются сущностями, чтобы значение не могло выйти за пределы кавычек

Отображение URL на странице

Вход:  search?q=hello&lang=en
Выход: search?q=hello&amp;lang=en
Применение: страница должна кодировать & перед вставкой URL в HTML, иначе парсер может счесть остальное искажённой сущностью

Не-ASCII символы (полное кодирование)

Вход:  CJK-символы, например 中文
Выход: полная числовая форма UTF-8 &#20013;&#25991; (или именованные сущности, если страница их поддерживает)
Применение: безопасное встраивание произвольного Unicode в устаревший HTML; современные страницы обычно полагаются на UTF-8

Часто задаваемые вопросы

Какие символы преобразует HTML-кодирование?

Пять зарезервированных в SGML символов: & → &amp;, < → &lt;, > → &gt;, " → &quot;, ' → &#39; (или &apos;). Дополнительно не-ASCII символы можно превратить в числовые сущности (&#xNN;) для устаревших систем, не дружащих с UTF-8.

Когда нужно HTML-кодирование?

Каждый раз, когда пользовательский текст вставляется в HTML-содержимое. Отсутствие кодирования — главная причина XSS-уязвимостей. Кодируйте пользовательские данные для тела HTML, значений атрибутов, контекста JavaScript, CSS и URL — у каждого контекста свои нюансы.

В чём разница между &#39; и &apos;?

Обе сущности выводят одинарную кавычку. &apos; появилась в HTML5 и не валидна в HTML4 и старых почтовых клиентах. Если результат может попадать в старые системы, используйте &#39;. По умолчанию инструмент выдаёт &#39; для максимальной совместимости.

Почему в выводе всё ещё остаётся &amp;?

Если на входе уже была сущность вроде &amp;, при кодировании получится &amp;amp; — и это правильно: исходный амперсанд был обычным символом, а не сущностью. Если источник уже закодирован сущностями, сначала декодируйте его.

Кодируются ли эмодзи?

Эмодзи — это валидный Unicode, и современный HTML обрабатывает их как обычные символы; кодировать их не нужно, если только целевая система не настаивает на ASCII. Включите опцию «числовые сущности для не-ASCII», чтобы превратить их в форму &#xNNNN;.

HTML-кодирование — это то же самое, что URL-кодирование?

Нет. URL-кодирование (процентное) заменяет небезопасные символы на последовательности %NN для использования в URL. HTML-кодирование заменяет их на именованные или числовые сущности для использования в HTML. Применяйте подходящий вид для нужного контекста — смешение ведёт к багам с двойным кодированием.

Преобразование выполняется локально?

Да. Кодирование и декодирование происходят в вашем браузере. Вставленный текст никуда не загружается.

Связанные инструменты

Кодировщик/Декодировщик URL

Бесплатный онлайн-кодировщик и декодировщик URL для параметров, текста Unicode и спецсимволов. Исправляйте проблемы с кодировкой ссылок прямо в браузере.

Кодировщик/Декодировщик Base64

Онлайн-инструмент для кодирования и декодирования Base64 с поддержкой UTF-8 текста, кириллицы и изображений. Мгновенное кодирование без установки программ.

Конвертер Unicode

Бесплатный онлайн-конвертер Unicode с поддержкой форматов \uXXXX, &#xXXXX; и других. Удобно работать с интернационализированным текстом и кодировками.

Инструмент форматирования HTML

Онлайн-инструмент для форматирования HTML с подсветкой синтаксиса и сжатием. Одним нажатием упорядочите беспорядочный HTML код.

Инструмент форматирования XML

Онлайн-инструмент для форматирования XML с автоматическим отступом, валидацией синтаксиса и сжатием. Настраиваемый отступ, быстрое обнаружение ошибок формата XML.

Инструмент экранирования JSON

Онлайн-инструмент для экранирования и разэкранирования JSON строк. Поддержка кавычек, переносов строк, табуляции и других специальных символов.