UltKit
Зображення11
PDF13
Документи й дані7
Відео6
Аудіо4
Інші інструменти22

Кодування й декодування HTML-сутностей

Екрануйте символи, які HTML сприймає як розмітку, за бажанням також усі символи поза ASCII, або перетворіть сутності на кшталт é і — назад на звичайний текст. Обидва напрямки працюють у вашому браузері, а декодований вміст ніколи не відображається як живий HTML.

Режим
Стиль сутностей
Екранувати

0 символів · 0 слів · 0 рядків

0 символів · 0 слів · 0 рядків

Працює повністю у вкладці браузера. Ваш текст ніколи не завантажується на сервер і не зберігається.

Поширені символи та їхні сутності

Іменована, десяткова й шістнадцяткова форми декодуються в один і той самий символ. Кодувальник знає 216 поширених іменованих сутностей; декодер розуміє всі іменовані посилання зі стандарту HTML.

СимволІменованіДесятковіШістнадцяткові
&&&&
<&lt;&#60;&#x3C;
>&gt;&#62;&#x3E;
"&quot;&#34;&#x22;
'&apos;&#39;&#x27;
(нерозривний пробіл)&nbsp;&#160;&#xA0;
©&copy;&#169;&#xA9;
®&reg;&#174;&#xAE;
™&trade;&#8482;&#x2122;
€&euro;&#8364;&#x20AC;
£&pound;&#163;&#xA3;
¥&yen;&#165;&#xA5;
—&mdash;&#8212;&#x2014;
–&ndash;&#8211;&#x2013;
…&hellip;&#8230;&#x2026;
«&laquo;&#171;&#xAB;
»&raquo;&#187;&#xBB;
°&deg;&#176;&#xB0;
×&times;&#215;&#xD7;
÷&divide;&#247;&#xF7;
é&eacute;&#233;&#xE9;
π&pi;&#960;&#x3C0;
→&rarr;&#8594;&#x2192;
😀—&#128512;&#x1F600;

Від 252 сутностей у HTML 4 до 2 231 у HTML5

Посилання на символ — це спосіб записати символ лише за допомогою ASCII. Числові посилання працюють для будь-якої кодової точки Unicode, у десятковому (&#233;) або шістнадцятковому (&#xE9;) вигляді. Іменовані посилання легше запам’ятати: у HTML 4 їх визначено 252, і вони охоплюють літери Latin-1, як-от &eacute;, грецькі літери, математичні символи та типографські знаки, як-от &mdash; і &hellip;. Цікаво, що &apos; серед них не було: він прийшов із XML і став чинним у HTML лише з HTML5.

HTML5 розширив список до 2231 іменованого посилання на символ, увібравши набір сутностей MathML, тож імена на кшталт &check;, &bigstar; і &NotEqualTilde; тепер працюють в усіх сучасних браузерах. У цю кількість входять застарілі написання без завершальної крапки з комою, як-от &amp і &copy: парсери досі приймають їх для сумісності, але писати їх не слід. Кодувальник тут використовує поширені імена з HTML 4 плюс &apos;, а для решти символів застосовує числове посилання; декодувальник передає текст власному парсеру браузера, тож розуміє всі 2231 імена.

Що екранувати і коли самого екранування замало

Only & < > " ' — налаштування для щоденної роботи: воно екранує п’ять символів, які можуть завершити текстовий вузол або атрибут у лапках. Цього достатньо, щоб показати приклад коду на сторінці або безпечно вставити текст користувача в HTML. Also every non-ASCII character перетворює на посилання також é, € та емодзі, для рідкісних каналів, що не передають UTF-8, наприклад деяких застарілих поштових шаблонів або систем, які псують кодування. Named, Decimal і Hex змінюють лише спосіб запису посилання; усі три декодуються в той самий символ. Сторінці в UTF-8 сутності для літер з діакритикою не потрібні.

Екранування захищає лише контекст HTML і нічого більше. Текст, який вставляється в блок script, вбудований обробник подій на кшталт onclick, атрибут style або href, що може починатися з javascript:, потребує іншого оброблення, і самого кодування сутностей там недостатньо для захисту від міжсайтового скриптингу. Фреймворки на кшталт React екранують текст за замовчуванням, тому в сучасних застосунках частіше трапляється подвійне екранування: користувачі бачать &amp; замість амперсанда. Щоб повністю прибрати теги, перетворіть розмітку за допомогою HTML у TXT; для екранування всередині URL скористайтеся кодуванням і декодуванням URL.

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

Які символи обов’язково треба екранувати в HTML?
У тексті обов’язкові & і <, а > екранують за домовленістю. Усередині значення атрибута екрануйте ще й лапку, яка його обмежує. Екранування всіх п’яти символів охоплює обидва випадки.
Чим &nbsp; відрізняється від звичайного пробілу?
&nbsp; — нерозривний пробіл, U+00A0. Він виглядає як пробіл, але забороняє перенесення рядка в цьому місці й, на відміну від звичайних пробілів у HTML, не згортається, коли їх кілька поспіль.
Чому на сторінці видно &amp; замість амперсанда?
Текст екранували двічі: спочатку у ваших даних, а потім ваш шаблон або фреймворк. Зберігайте сирий текст і нехай екранує один шар, зазвичай шаблон, під час виведення.
Чи безпечно декодувати тут HTML з ненадійного джерела?
Так. Декодувальник обробляє вхідні дані як звичайний текстовий вміст, тому теги не створюються, скрипти не виконуються, а зображення не завантажуються. У символи перетворюються лише посилання на сутності.
Які сутності кращі: іменні чи числові?
Іменовані легше читати, а числові працюють для будь-якого символу та в кожному XML-парсері. В XML без DTD попередньо визначено лише &amp;, &lt;, &gt;, &quot; і &apos;.