Экранирование HTML — это процесс замены символов, имеющих специальное значение в HTML, соответствующими ссылками на сущности. Пять символов, которые необходимо экранировать: амперсанд (&), знак «меньше» (<), знак «больше» (>), двойные кавычки (") и одинарная кавычка ('). Без экранирования браузер интерпретирует эти символы как инструкции разметки, а не как отображаемый текст — это нарушает отображение страницы и открывает дверь для инъекционных атак.
Спецификация HTML (поддерживаемая WHATWG) определяет две формы ссылок на символы: именованные сущности, такие как &, и числовые сущности, такие как & или &. Именованные сущности удобнее читать в исходном коде. Числовые сущности (десятичные или шестнадцатеричные) могут представлять любую кодовую точку Unicode, что делает их полезными для символов без именованного псевдонима. Обе формы дают идентичный результат в браузере.
Декодирование (также называемое unescaping) — обратная операция: преобразование ссылок на сущности обратно в буквальные символы. Это распространено при извлечении текста из HTML-источника, переносе контента между системами или отладке шаблонов с двойным экранированием. Этот инструмент выполняет оба направления в браузере, так что вы можете проверить логику экранирования или восстановить обычный текст из насыщенного HTML-источника за секунды.
Зачем использовать инструмент HTML Escape?
Вручную заменять угловые скобки и амперсанды в больших блоках текста — утомительно и ненадёжно. Специализированный инструмент конвертирует ввод за один шаг без установки.
⚡
Мгновенное преобразование
Вставьте текст или HTML и сразу получите экранированный или декодированный вывод. Ожидание серверного запроса не требуется — вся обработка происходит локально в JavaScript.
🔒
Обработка без передачи данных
Ввод никогда не покидает браузер. Ничего не отправляется на сервер и нигде не сохраняется — вы можете безопасно экранировать разметку, содержащую учётные данные, API-ключи или внутренний код.
📋
Без аккаунта и установки
Откройте страницу и начните вставлять. Нет необходимости входить в систему, подтверждать почту или устанавливать программное обеспечение. Работает на любом устройстве с современным браузером.
🌐
Полное покрытие сущностей
Обрабатывает пять обязательных специальных символов HTML плюс числовые сущности (десятичные и шестнадцатеричные). Поддерживает двунаправленное преобразование: экранирование с последующим декодированием возвращает исходную строку.
При отрисовке текста, введённого пользователем на странице, сначала экранируйте его, чтобы браузер не интерпретировал его как HTML-теги. Это основная защита от stored XSS в любом шаблоне, выводящем сырые строки.
Бэкенд-разработчик: генерация HTML-ответов
Серверный код, конкатенирующий строки в HTML, должен экранировать динамические значения перед вставкой. Используйте этот инструмент, чтобы убедиться, что ваша функция экранирования даёт корректный вывод для граничных случаев, таких как вложенные кавычки.
DevOps: встраивание конфигурации в HTML
Встраивание JSON или shell-команд в HTML-страницу (например, в теге script или атрибуте data) требует экранирования. Убедитесь, что угловые скобки и амперсанды в фрагментах конфигурации правильно закодированы.
QA-инженер: тестирование XSS-векторов
Вставьте распространённые XSS-нагрузки в инструмент, чтобы убедиться, что вывод вашего приложения совпадает с корректно экранированной версией. Сравните экранированный вывод посимвольно с тем, что производит ваше приложение.
Технический писатель: примеры кода в документации
Публикация фрагментов кода в HTML-документации (Jekyll, Hugo, кастомные CMS) требует экранирования угловых скобок для обобщённого синтаксиса типов и заполнителей шаблонов. Вставьте пример кода — и каждый специальный символ будет мгновенно закодирован.
Начинающий разработчик: изучение HTML-сущностей
Введите или вставьте любой символ и посмотрите его именованную и числовую формы сущности. Экспериментируйте с граничными случаями: неразрывные пробелы, длинные тире, символы Unicode — чтобы понять, как работает кодирование символов в HTML.
Таблица HTML-сущностей
В таблице ниже приведены часто используемые HTML-сущности. Пять специальных символов (& < > " ') всегда должны быть экранированы в содержимом HTML и значениях атрибутов. Остальные сущности необязательны, но полезны для символов, которые сложно набрать или которые неоднозначны в исходном коде.
Экранирование vs. Декодирование: когда что использовать
Две операции являются обратными друг другу. Выбор неправильного направления даёт двойное кодирование или незащищённый вывод.
Экранирование (кодирование)
Используйте при вставке ненадёжного или динамического текста в HTML. Преобразует буквальный < в <, чтобы браузер отображал символ, а не начинал тег. Применяйте перед выводом пользовательского ввода, записей журналов или любой строки, которая может содержать разметку.
Декодирование (unescape)
Используйте при извлечении обычного текста из HTML-источника. Преобразует < обратно в <. Применяйте при переносе контента из CMS, разборе scraped HTML или исправлении двойно закодированных строк вида &amp;, которые отображают имена сущностей вместо символов.
Примеры кода
Ниже приведены рабочие примеры экранирования и декодирования HTML на четырёх языках. Каждый фрагмент охватывает оба направления и обрабатывает граничные случаи: вложенные кавычки и числовые сущности.
В чём разница между экранированием HTML и кодированием URL?
Экранирование HTML заменяет символы, специальные в HTML (< > & " '), ссылками на сущности вида <, чтобы они отображались как текст. Кодирование URL (percent-encoding) заменяет символы, небезопасные в URL, последовательностями %XX в шестнадцатеричном формате. Они защищают разные контексты: экранирование HTML предотвращает инъекцию разметки, а кодирование URL обеспечивает корректные строки запроса и сегменты пути.
Какие символы необходимо экранировать в HTML?
Пять символов, которые необходимо всегда экранировать: & (амперсанд), < (знак «меньше»), > (знак «больше»), " (двойная кавычка внутри атрибутов), ' (одинарная кавычка внутри атрибутов). Неэкранирование любого из них может нарушить отрисовку или создать уязвимость межсайтового скриптинга.
Допустима ли сущность ' в HTML5?
Да. Именованная сущность ' определена в спецификации HTML5 и поддерживается всеми современными браузерами. В HTML 4 она отсутствовала — там признавались только &, <, > и ". Если нужна совместимость с очень старыми парсерами HTML 4, используйте числовую форму '.
Как исправить двойное кодирование HTML-сущностей вида &amp;?
Двойное кодирование возникает, когда уже экранированная строка снова проходит через функцию экранирования. Решение — декодировать до тех пор, пока вывод не стабилизируется. Вставьте двойно закодированную строку в этот инструмент в режиме декодирования, затем повторите, если ссылки на & остались. Чтобы предотвратить двойное кодирование, проверьте, не экранирован ли ввод уже, прежде чем применять функцию экранирования.
Можно ли использовать HTML-сущности внутри строк JavaScript?
HTML-сущности интерпретируются HTML-парсером, а не движком JavaScript. Внутри блока script код выполняется после того, как HTML-парсер обработал страницу, поэтому < в блоке script становится < до того, как JavaScript его увидит. Для встроенных обработчиков событий (onclick и др.) значение атрибута сначала декодируется HTML, а затем выполняется как JavaScript. Во внешних .js-файлах сущности не имеют специального значения и воспринимаются как буквальный текст.
В чём разница между htmlspecialchars и htmlentities в PHP?
htmlspecialchars() экранирует только пять специальных символов (& < > " '), влияющих на структуру HTML. htmlentities() экранирует эти пять плюс каждый символ, имеющий именованную HTML-сущность: знак копирайта, буквы с диакритическими знаками и т.д. В целях безопасности htmlspecialchars() с ENT_QUOTES достаточно. htmlentities() полезна, когда нужен ASCII-совместимый вывод для систем, не поддерживающих UTF-8.
Достаточно ли экранирования HTML для защиты от XSS?
Экранирование HTML предотвращает XSS в наиболее распространённом случае: вставка ненадёжного текста в содержимое HTML-элемента или значения атрибутов. Оно не защищает другие контексты инъекций. Вставка пользовательских данных в блок script требует экранирования строк JavaScript. Вставка в атрибут style требует CSS-экранирования. Вставка в атрибут URL (href, src) требует валидации URL плюс кодирования. Полноценная защита от XSS применяет контекстно-специфическое экранирование в каждой точке вставки.