Кодування
HTML Entities Encode/Decode
Кодування та декодування HTML-сутностей — безпечне відображення спецсимволів на сторінці.
HTML-сутності — це спосіб записати символи, які інакше зламали б розмітку (<, >, &) або не мають клавіші на клавіатурі, у безпечному текстовому вигляді на кшталт < чи &. Інструмент кодує й декодує такі сутності прямо в браузері.
Як користуватися
- Кодування: вставте текст — символи <, >, &, лапки та інші спецсимволи замінюються на відповідні сутності.
- Декодування: вставте HTML із сутностями (&, © тощо), щоб побачити звичайний текст.
- Підтримуються як іменовані сутності (&), так і числові (& чи &).
Типові сценарії
- Безпечне відображення тексту користувача (коментаря, повідомлення) на сторінці без ризику зламати розмітку чи вставити скрипт.
- Вставка прикладів HTML-коду в статтю чи документацію так, щоб браузер показав їх як текст, а не відрендерив.
- Розкодування вмісту, скопійованого з іншого сайту, де символи прийшли вже закодованими.
Що варто памʼятати
Екранування HTML-сутностей захищає лише від XSS через текстовий вміст сторінки — воно не захищає JavaScript-контекст (innerHTML, eval) чи атрибути href/src із невалідованими URL.
Кодувати потрібно саме там, де текст вставляється в HTML, а не заздалегідь при збереженні в базу — інакше дані спотворюються при повторному використанні не в HTML-контексті.
Стаття про цей інструмент: HTML Entities: як безпечно виводити спецсимволи на сторінці
Часті запитання
Навіщо кодувати текст у HTML-сутності?
Символи на кшталт <, > та & мають спеціальне значення в розмітці HTML і можуть зламати сторінку або відкрити шлях для XSS, якщо вставити їх у код напряму. Кодування в сутності дозволяє безпечно відобразити такий текст як звичайний вміст.
Чим "Основні" сутності відрізняються від "Усіх символів"?
Режим "Основні" кодує лише символи, критичні для розмітки: <, >, &, лапки та апостроф. Режим "Усі символи" додатково перетворює будь-які не-ASCII символи (кирилицю, емодзі тощо) у числові чи іменовані сутності.
У чому різниця між іменованою і числовою сутністю?
Іменована сутність — це мнемонічна назва, наприклад & для амперсанда. Числова — код символу за Unicode: десятковий & або шістнадцятковий &. Обидва варіанти відображаються однаково в браузері.
Чи потрібно екранувати текст в атрибуті інакше, ніж у тілі сторінки?
Основні символи (<, >, &) екранують однаково, але всередині атрибута в лапках додатково критично екранувати саме той тип лапок, яким обмежений атрибут, — інакше значення "розірветься" раніше, ніж очікувалось.
Чи захищає HTML-екранування від усіх видів XSS?
Ні. Воно закриває найпоширеніший вектор — вставку тексту в HTML-вміст, але не захищає від XSS через JavaScript-контекст (наприклад, innerHTML з подальшим виконанням коду) чи невалідовані URL у href/src.