Екранування HTML — це процес заміни символів, що мають спеціальне значення в HTML, відповідними посиланнями на сутності. П'ять символів, які обов'язково потрібно екранувати: амперсанд (&), знак «менше» (<), знак «більше» (>), подвійні лапки (") та одинарні лапки ('). Без екранування браузер інтерпретує ці символи як інструкції розмітки, а не як текст для відображення, що порушує рендеринг сторінки та відкриває двері для ін'єкційних атак.
Специфікація HTML (підтримується WHATWG) визначає дві форми посилань на символи: іменовані сутності, як-от &, та числові сутності, як-от & або &. Іменовані сутності легше читати у вихідному коді. Числові сутності (десяткові або шістнадцяткові) можуть представляти будь-яку кодову точку Unicode, що робить їх зручними для символів без іменованого аліасу. Обидві форми дають однаковий результат у браузері.
Розекранування (також декодування) — це зворотна операція: перетворення посилань на сутності назад у буквальні символи. Це часто потрібно при вилученні тексту з HTML-джерела, перенесенні контенту між системами або налагодженні шаблонів, що подвійно кодують сутності. Цей інструмент виконує обидві операції у браузері, тож ви можете перевірити логіку екранування або отримати звичайний текст із насиченого HTML-джерела за кілька секунд.
Навіщо використовувати інструмент для екранування HTML?
Ручна заміна кутових дужок і амперсандів у великих блоках тексту — це рутинна та помилконебезпечна робота. Спеціальний інструмент конвертує введені дані за один крок без жодної установки.
⚡
Миттєва конвертація
Вставте текст або HTML і негайно отримайте екранований або розекранований результат. Не потрібно чекати відповіді сервера — вся обробка відбувається локально в JavaScript.
🔒
Конфіденційність насамперед
Введені дані ніколи не залишають браузер. Нічого не надсилається на сервер і ніде не зберігається, тож ви можете безпечно екранувати розмітку з обліковими даними, API-ключами або внутрішнім кодом.
📋
Без облікового запису та налаштувань
Відкрийте сторінку і одразу починайте вставляти. Немає жодного входу, підтвердження email чи програм для встановлення. Працює на будь-якому пристрої з сучасним браузером.
🌐
Повне покриття сутностей
Обробляє п'ять обов'язкових спеціальних символів HTML, а також числові сутності (десяткові та шістнадцяткові). Підтримує двосторонню конвертацію: екранування, а потім розекранування повертає вихідний рядок.
Випадки використання HTML-екранування
Frontend-розробник: відображення введених даних
При рендерингу тексту, введеного користувачем, на сторінці спочатку екрануйте його, щоб браузер не інтерпретував його як HTML-теги. Це основний захист від збереженого XSS у будь-якому шаблоні, що виводить рядки без обробки.
Backend-інженер: генерація HTML-відповідей
Серверний код, що конкатенує рядки в HTML, повинен екранувати динамічні значення перед вставкою. Використовуйте цей інструмент, щоб перевірити, що ваша функція екранування дає правильний результат для граничних випадків, як-от вкладені лапки.
DevOps: вбудовування конфігурації в HTML
Вбудований JSON або shell-команди всередині HTML-сторінки (наприклад, у теґах script або в атрибутах даних) потребують екранування. Перевірте, що кутові дужки та амперсанди у ваших фрагментах конфігурації правильно закодовані.
QA-інженер: тестування XSS-векторів
Вставте поширені XSS-навантаження в інструмент, щоб підтвердити, що вивід вашого застосунку відповідає правильно екранованій версії. Порівняйте екранований вивід посимвольно з тим, що виробляє ваш застосунок.
Технічний автор: зразки коду в документації
Публікація фрагментів коду в HTML-документації (Jekyll, Hugo, власні CMS) вимагає екранування кутових дужок для синтаксису узагальнених типів і заповнювачів шаблонів. Вставте зразок коду — і кожен спеціальний символ буде закодовано миттєво.
Студент: вивчення HTML-сутностей
Введіть або вставте будь-який символ і побачте його іменовану та числову форми сутності. Поекспериментуйте з граничними випадками — нерозривними пробілами, тире em та символами Unicode — щоб зрозуміти, як працює кодування символів HTML.
Таблиця довідки HTML-сутностей
У таблиці нижче наведено найуживаніші HTML-сутності. П'ять спеціальних символів (& < > " ') завжди потрібно екранувати в контенті HTML та значеннях атрибутів. Інші сутності необов'язкові, але зручні для символів, які важко набрати або які неоднозначні у вихідному коді.
Екранування проти розекранування: коли що використовувати
Дві операції є взаємно оберненими. Вибір неправильного напрямку призводить до подвійного кодування або незахищеного виводу.
Екранування (кодування)
Використовуйте при вставці ненадійного або динамічного тексту в HTML. Перетворює буквальний < на <, щоб браузер відображав символ, а не починав теґ. Застосовуйте перед рендерингом введень користувача, записів журналів або будь-якого рядка, що може містити розмітку.
Розекранування (декодування)
Використовуйте при вилученні звичайного тексту з HTML-джерела. Перетворює < назад у <. Застосовуйте при перенесенні контенту з CMS, розборі зібраного HTML або виправленні подвійно закодованих рядків на кшталт &amp;, що відображають назви сутностей замість символів.
Приклади коду
Нижче наведено робочі приклади екранування та розекранування HTML чотирма мовами. Кожен фрагмент охоплює обидва напрямки і обробляє граничні випадки, як-от вкладені лапки та числові сутності.
У чому різниця між екрануванням HTML та URL-кодуванням?
Екранування HTML замінює символи, що є спеціальними в HTML (< > & " '), посиланнями на сутності на кшталт <, щоб вони відображалися як текст. URL-кодування (відсоткове кодування) замінює символи, небезпечні в 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 застосовує контекстно-специфічне екранування в кожній точці вставки.