HTML-сущности: кодирование / декодирование
Экранируйте текст для HTML или превращайте &-сущности обратно в символы
Об этом инструменте
Экранируйте текст для безопасного включения в HTML — & становится &amp;, < становится &lt; — или декодируйте текст, полный сущностей, обратно в читаемые символы: поддерживаются именованные сущности (&rarr;), десятичные (&#169;) и шестнадцатеричные (&#xA9;) числовые ссылки.
Кодирование предлагает два уровня: пять ключевых символов, ломающих структуру HTML (& < > " '), — этого достаточно для корректности, — либо всё не-ASCII, что полезно, когда какой-то инструмент в цепочке между вами и страницей портит UTF-8. Режим «только числовые» пропускает именованные сущности ради максимальной совместимости со строгими XML-парсерами, которые гарантируют лишь пять предопределённых.
Декодер — это повседневная половина: вставьте наскрапленный фрагмент или ответ API, полный &#x27;, и получите чистый текст. Неизвестные имена сущностей проходят нетронутыми, а не угадываются.
Частые вопросы
- Какие символы обязательно экранировать в HTML?
- В текстовом содержимом: & и <. В значениях атрибутов: ещё и кавычка, ограничивающая атрибут (" или '). Экранировать > принято, но строго не обязательно. Всё остальное может появляться в документе UTF-8 буквально.
- Является ли кодирование сущностей защитой от XSS?
- Экранирование пяти структурных символов — это ядро экранирования вывода в HTML-контексте, да — но только для текстовых и атрибутных контекстов HTML. URL, строки JavaScript и CSS требуют своих контекстно-специфичных кодировок; одно лишь экранирование сущностей не делает произвольную инъекцию безопасной там.
- Именованные или числовые сущности — какие выводить?
- Числовые ссылки (&#xE9;) работают в любом парсере HTML и XML. Именованные сущности читабельнее, но XML предопределяет только пять, поэтому &eacute; ломает строгий конвейер XML/XHTML. Если сомневаетесь — числовые.
- Почему в моих данных встречается &amp;#39; (двойное кодирование)?
- Два слоя закодировали по разу: & из первого кодирования был сам экранирован вторым проходом. Декодируйте здесь дважды, чтобы восстановить текст, а затем найдите и исправьте слой, который не должен кодировать.