TanodTools
RU

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

Превращайте текст в HTML-сущности или возвращайте сущности вроде & и € к символам, которые они обозначают.

Работает в браузере; введённые вами данные не покидают устройство

Что вы хотите сделать?

Вставьте текст, чтобы начать.

Текст до нескольких миллионов символов. Декодирование понимает все именованные сущности, которые знает ваш браузер (полный список HTML5), а также десятичные и шестнадцатеричные числа; у ссылки должна быть закрывающая точка с запятой. Декодирование выполняется только на один уровень: &amp;lt; превращается в &lt;, а не в <.

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

  1. Выберите Кодировать или Декодировать и вставьте текст.
  2. При кодировании выберите, кодировать ли только опасные символы, использовать ли имена вроде &eacute;, где они есть, или записывать числами всё, что находится за пределами ASCII.
  3. Скопируйте результат.

Что такое HTML-сущности

В HTML у нескольких символов особая роль: знак «меньше» начинает тег, амперсанд начинает сущность, а кавычки завершают значение атрибута. Чтобы показать один из этих символов как текст, вместо него пишут сущность: &lt; для <, &amp; для &. Сущности также позволяют записывать символы, которые трудно набрать или которые не вмещает старая кодировка страницы, например &eacute; для é, &euro; для € или &#128512; для эмодзи.

Сущность начинается с амперсанда и заканчивается точкой с запятой. Между ними стоит имя (copy), десятичное число после # (#169) или шестнадцатеричное число после #x (#xA9). Все три записи дают знак авторского права. Кодирование проходит по тексту символ за символом: пять опасных символов всегда становятся сущностями, а остальное зависит от выбранного варианта, от «ничего» до числа для каждого символа.

Декодирование читает каждую ссылку и заменяет её символом. Числа преобразуются напрямую по правилам HTML: число, равное нулю, выходящее за допустимый диапазон или являющееся суррогатом, превращается в символ замены, а числа от 128 до 159 читаются как символы Windows-1252, как это делают браузеры. Имена разбирает ваш браузер, которому известен весь список HTML5. Декодирование выполняется за один проход, поэтому &amp;lt; превращается в &lt;, а не в голый знак «меньше».

Советы

Вопросы и ответы

Какие символы нужно экранировать в HTML?

Пять: знак «меньше» < (&lt;), знак «больше» > (&gt;), амперсанд & (&amp;), двойную кавычку " (&quot;) и одинарную кавычку ' (&#39;). Экранирование позволяет показать код или пользовательский ввод как текст, чтобы он не воспринимался как разметка. Первый вариант, Только опасные символы, делает именно это.

Чем именованные сущности отличаются от числовых?

Именованная сущность использует короткое слово, например &eacute; для é или &euro; для €. Числовая использует кодовую позицию Unicode в десятичном (&#233;) или шестнадцатеричном (&#xE9;) виде. Оба варианта дают один и тот же символ. Имена есть только у части символов, для остальных нужны числа.

Зачем вообще кодировать символы вне ASCII?

Если страница или письмо передаются не в UTF-8, буквы с диакритикой и символы могут превратиться в «кракозябры». Сущности состоят из чистого ASCII, поэтому переживают любую кодировку.

Охватывает ли декодирование все сущности?

Да. Десятичные и шестнадцатеричные ссылки преобразуются напрямую, а имена ищет встроенный в браузер HTML-парсер, который знает полный список HTML5 из более чем двух тысяч имён. Ссылка без точки с запятой остаётся как есть, как и неизвестное имя, которое выводится списком, чтобы вы его увидели.

Достаточно ли кодирования, чтобы остановить XSS?

Кодирование пяти опасных символов — правильное решение, когда вы помещаете текст в содержимое HTML-элемента или в значение атрибута в кавычках. Внутри script, style, атрибута без кавычек или URL этого недостаточно: там нужно своё экранирование. Инструмент предназначен для текста, который вы вставляете, и не заменяет экранирование в вашем фреймворке.

Загружается ли мой текст?

Нет. Всё происходит в вашем браузере, и ничего не покидает устройство.