ToolDeck

HTML Escape / Unescape

Екранування та розекранування HTML-сутностей (& < > " тощо)

Спробувати приклад

Введення

Результат

Працює локально · Безпечно вставляти секрети
Результат з'явиться тут…

Що таке екранування HTML?

Екранування HTML — це процес заміни символів, що мають спеціальне значення в HTML, відповідними посиланнями на сутності. П'ять символів, які обов'язково потрібно екранувати: амперсанд (&), знак «менше» (<), знак «більше» (>), подвійні лапки (") та одинарні лапки ('). Без екранування браузер інтерпретує ці символи як інструкції розмітки, а не як текст для відображення, що порушує рендеринг сторінки та відкриває двері для ін'єкційних атак.

Специфікація HTML (підтримується WHATWG) визначає дві форми посилань на символи: іменовані сутності, як-от &amp;, та числові сутності, як-от &#38; або &#x26;. Іменовані сутності легше читати у вихідному коді. Числові сутності (десяткові або шістнадцяткові) можуть представляти будь-яку кодову точку 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 та значеннях атрибутів. Інші сутності необов'язкові, але зручні для символів, які важко набрати або які неоднозначні у вихідному коді.

СимволОписІменована сутністьЧислова сутність
&Ampersand&amp;&#38;
<Less-than sign&lt;&#60;
>Greater-than sign&gt;&#62;
"Double quote&quot;&#34;
'Single quote / apostrophe&apos;&#39;
 Non-breaking space&nbsp;&#160;
©Copyright sign&copy;&#169;
®Registered sign&reg;&#174;
Em dash&mdash;&#8212;
Right single quote&rsquo;&#8217;
Euro sign&euro;&#8364;

Екранування проти розекранування: коли що використовувати

Дві операції є взаємно оберненими. Вибір неправильного напрямку призводить до подвійного кодування або незахищеного виводу.

Екранування (кодування)
Використовуйте при вставці ненадійного або динамічного тексту в HTML. Перетворює буквальний < на &lt;, щоб браузер відображав символ, а не починав теґ. Застосовуйте перед рендерингом введень користувача, записів журналів або будь-якого рядка, що може містити розмітку.
Розекранування (декодування)
Використовуйте при вилученні звичайного тексту з HTML-джерела. Перетворює &lt; назад у <. Застосовуйте при перенесенні контенту з CMS, розборі зібраного HTML або виправленні подвійно закодованих рядків на кшталт &amp;amp;, що відображають назви сутностей замість символів.

Приклади коду

Нижче наведено робочі приклади екранування та розекранування HTML чотирма мовами. Кожен фрагмент охоплює обидва напрямки і обробляє граничні випадки, як-от вкладені лапки та числові сутності.

JavaScript (browser / Node.js)
// Escape HTML entities manually
function escapeHtml(str) {
  return str
    .replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&#39;')
}

escapeHtml('<img src="x" onerror="alert(1)">')
// → "&lt;img src=&quot;x&quot; onerror=&quot;alert(1)&quot;&gt;"

// Unescape using DOMParser (browser only)
function unescapeHtml(str) {
  const doc = new DOMParser().parseFromString(str, 'text/html')
  return doc.documentElement.textContent
}

unescapeHtml('&lt;div&gt;Hello&lt;/div&gt;')
// → "<div>Hello</div>"
Python
import html

# Escape special characters
html.escape('<script>alert("XSS")</script>')
# → '&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;'

# Escape including single quotes (quote=True is default in Python 3.8+)
html.escape("It's <b>bold</b>", quote=True)
# → 'It&#x27;s &lt;b&gt;bold&lt;/b&gt;'

# Unescape entities back to characters
html.unescape('&lt;p&gt;Price: &euro;10&lt;/p&gt;')
# → '<p>Price: €10</p>'

# Unescape numeric entities
html.unescape('&#60;div&#62;&#38;amp;&#60;/div&#62;')
# → '<div>&amp;</div>'
Go
package main

import (
    "fmt"
    "html"
)

func main() {
    // Escape HTML special characters
    escaped := html.EscapeString(`<a href="page?id=1&sort=name">Link</a>`)
    fmt.Println(escaped)
    // → &lt;a href=&quot;page?id=1&amp;sort=name&quot;&gt;Link&lt;/a&gt;

    // Unescape back to original
    original := html.UnescapeString("&lt;b&gt;Go &amp; HTML&lt;/b&gt;")
    fmt.Println(original)
    // → <b>Go & HTML</b>
}
PHP
<?php
// Escape HTML entities (ENT_QUOTES escapes both " and ')
echo htmlspecialchars('<p class="info">Tom & Jerry's</p>', ENT_QUOTES, 'UTF-8');
// → &lt;p class=&quot;info&quot;&gt;Tom &amp; Jerry&#039;s&lt;/p&gt;

// Convert all applicable characters to HTML entities
echo htmlentities('Price: 10€ — 50% off', ENT_QUOTES, 'UTF-8');
// → Price: 10&euro; &mdash; 50% off

// Decode entities back
echo html_entity_decode('&lt;div&gt;&amp;copy; 2026&lt;/div&gt;');
// → <div>&copy; 2026</div>

Поширені запитання

У чому різниця між екрануванням HTML та URL-кодуванням?
Екранування HTML замінює символи, що є спеціальними в HTML (< > & " '), посиланнями на сутності на кшталт &lt;, щоб вони відображалися як текст. URL-кодування (відсоткове кодування) замінює символи, небезпечні в URL, шістнадцятковими послідовностями %XX. Вони захищають різні контексти: екранування HTML запобігає ін'єкції розмітки, тоді як URL-кодування забезпечує коректні рядки запиту та сегменти шляху.
Які символи потрібно екранувати в HTML?
П'ять символів, які завжди потрібно екранувати: & (амперсанд), < (знак «менше»), > (знак «більше»), " (подвійні лапки в атрибутах) та ' (одинарні лапки в атрибутах). Якщо не екранувати будь-який із них, це може порушити рендеринг або створити вразливість до міжсайтового скриптингу.
Чи є &apos; дійсним в HTML5?
Так. Іменована сутність &apos; визначена в специфікації HTML5 і підтримується всіма сучасними браузерами. Вона не була частиною HTML 4, який розпізнавав лише &amp;, &lt;, &gt; та &quot;. Якщо вам потрібно підтримувати дуже старі HTML 4 парсери, використовуйте числову форму &#39;.
Як виправити подвійно закодовані HTML-сутності на кшталт &amp;amp;?
Подвійне кодування виникає, коли вже екранований рядок проходить через функцію екранування вдруге. Рішення — розекранувати, доки вивід не стабілізується. Вставте подвійно закодований рядок у цей інструмент у режимі розекранування, а потім запустіть знову, якщо залишилися посилання &amp;. Щоб запобігти подвійному кодуванню, перевіряйте, чи вхідні дані вже екрановані, перед застосуванням функції екранування.
Чи можна використовувати HTML-сутності всередині рядків JavaScript?
HTML-сутності інтерпретуються HTML-парсером, а не рушієм JavaScript. Всередині блоку script код виконується після того, як HTML-парсер обробляє сторінку, тому &lt; у блоці 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 застосовує контекстно-специфічне екранування в кожній точці вставки.