Открыть сервис

HTML-сущности

HTML-сущности (также известные как символьные подстановки, мнемоники или escape-последовательности) — это специальные текстовые конструкции в языке гипертекстовой разметки HTML, предназначенные для отображения символов, которые невозможно или неудобно вводить непосредственно в исходном коде документа. Они используются для вставки зарезервированных символов разметки (например, угловых скобок), символов, отсутствующих на стандартной клавиатуре, а также для представления символов, заданных числовыми кодами в стандарте Юникод.

История и происхождение

Необходимость в HTML-сущностях возникла на ранних этапах развития Всемирной паутины, когда стандарт HTML (первая версия была предложена Тимом Бернерсом-Ли в 1991 году) базировался на ограниченном наборе символов, в первую очередь на ASCII. В то время возникла проблема: как отобразить в браузере символы, которые имеют специальное значение в самом языке разметки, например, знак «меньше» (<), который используется для открытия тегов.

Первым решением стало введение escape-последовательностей, заимствованных из стандарта SGML (Standard Generalized Markup Language), на котором основан HTML. В спецификациях HTML 2.0 (1995 год) и HTML 3.2 (1997 год) был закреплён базовый набор именованных сущностей. С развитием стандарта HTML 4.01 (1999 год) и переходом к XHTML набор был значительно расширен, включив в себя символы из различных письменностей, математические знаки и валюты. Современный стандарт HTML Living Standard (поддерживаемый WHATWG) продолжает использовать и расширять этот механизм, хотя с повсеместным внедрением кодировки UTF-8 (которая позволяет напрямую хранить любые символы Юникода) необходимость в сущностях для многих практических задач снизилась.

Классификация и синтаксис

HTML-сущности делятся на два основных типа: именованные (мнемонические) и числовые.

Именованные сущности

Именованные сущности представляют собой короткие буквенные мнемокоды, начинающиеся с амперсанда (&) и заканчивающиеся точкой с запятой (;). Они проще для запоминания и чтения человеком, чем числовые коды. Например:

  • &amp; — амперсанд (&). Необходим для отображения самого символа амперсанда, иначе браузер может воспринять его как начало новой сущности.
  • &lt; — знак «меньше» (<).
  • &gt; — знак «больше (>`).
  • &quot; — двойная кавычка (").
  • &apos; — апостроф (одинарная кавычка, '). Включён в стандарт XHTML и HTML5, но не был в HTML 4.01.
  • &nbsp; — неразрывный пробел. Предотвращает перенос строки между словами и не позволяет браузеру схлопнуть несколько пробелов в один.
  • &copy; — знак авторского права (©).
  • &reg; — знак зарегистрированной торговой марки (®).
  • &euro; — символ евро ().
  • &mdash; — длинное тире ().

Общее количество именованных сущностей в стандарте HTML5 составляет более 2200. Они охватывают латиницу, греческий алфавит, кириллицу (частично), математические операторы, стрелки, геометрические фигуры и другие символы.

Числовые сущности

Числовые сущности позволяют вставить любой символ из таблицы Юникод по его числовому коду. Они также начинаются с & и заканчиваются ;, но после амперсанда следует символ решётки (#). Существует два подтипа:

  1. Десятичные сущности: Используют десятичный код символа. Синтаксис: &#N; (где N — десятичное число). Пример: &#169; — знак авторского права (©).
  2. Шестнадцатеричные сущности: Используют шестнадцатеричный код символа. Синтаксис: &#xN; или &#X N; (где N — шестнадцатеричное число, буквы A-F могут быть как заглавными, так и строчными). Пример: &#xA9; — знак авторского права (©). Шестнадцатеричная запись часто предпочтительнее, так как она напрямую соответствует коду символа в стандарте Юникод (например, U+00A9).

Числовые сущности универсальны и позволяют отобразить любой символ из диапазона Юникод, даже если для него нет именованного мнемокода.

Применение

Основные области применения HTML-сущностей:

  1. Экранирование зарезервированных символов: Это основная и исторически первая функция. Без использования сущностей &lt; и &gt; браузер интерпретировал бы < и > как начало или конец тега, что привело бы к искажению отображения или ошибке валидации. Например, для отображения в тексте фрагмента кода <div> необходимо написать &lt;div&gt;.
  2. Отображение символов, отсутствующих на клавиатуре: Сущности позволяют легко вставлять типографские знаки (длинное тире, кавычки-ёлочки &laquo; и &raquo;), знаки валют (&pound;фунт стерлингов, &yen; — иена), математические символы (&sum; — сумма, &pi; — пи), стрелки (&rarr; — стрелка вправо) и т.д.
  3. Обеспечение корректного отображения при проблемах с кодировкой: Если веб-страница сохранена в кодировке, отличной от UTF-8 (например, Windows-1251), и в ней встречаются символы, не входящие в эту кодировку, использование числовых сущностей гарантирует их корректное отображение в браузере независимо от настроек кодировки документа.
  4. Предотвращение XSS-атак: В веб-разработке при выводе пользовательского контента (например, комментариев) на страницу, все потенциально опасные символы (особенно <, >, &, ", ') должны быть заменены на соответствующие HTML-сущности. Это предотвращает внедрение вредоносного кода (Cross-Site Scripting, XSS), который может быть интерпретирован браузером как скрипт или тег.
  5. Создание неразрывных конструкций: Использование &nbsp; (неразрывного пробела) между числами и единицами измерения (например, «100&nbsp;кг») или инициалами и фамилией (например, «А.&nbsp;С.&nbsp;Пушкин») предотвращает разрыв этих элементов при переносе строки.

Примеры использования

СимволОписаниеИменованная сущностьДесятичная сущность
<Знак «меньше»&lt;&#60;
>Знак «больше»&gt;&#62;
&Амперсанд&amp;&#38;
"Двойная кавычка&quot;&#34;
'Апостроф&apos;&#39;
©Знак копирайта&copy;&#169;
®Зарегистрированная марка&reg;&#174;
Евро&euro;&#8364;
Длинное тире&mdash;&#8212;
Стрелка влево&larr;&#8592;

Критика и альтернативы

Несмотря на широкое распространение, использование HTML-сущностей имеет некоторые недостатки:

  • Читаемость исходного кода: Обилие сущностей, особенно длинных именованных или числовых, может сильно ухудшить читаемость HTML-кода для человека. Например, текст, содержащий множество математических символов, становится трудным для редактирования.
  • Избыточность: С повсеместным переходом на кодировку UTF-8 необходимость в использовании сущностей для большинства символов (кроме зарезервированных) отпала. Современные редакторы и системы управления контентом (CMS) позволяют вставлять любые символы Юникода напрямую, что делает код чище.
  • Сложность запоминания: Существует более 2000 именованных сущностей, и запомнить их все невозможно. Разработчики часто вынуждены обращаться к справочным таблицам.

Альтернативой использованию сущностей для отображения специальных символов является прямая вставка символов Юникода в HTML-документ, сохранённый в кодировке UTF-8. Этот подход рекомендуется современными стандартами веб-разработки, так как он упрощает код и снижает вероятность ошибок. Однако экранирование зарезервированных символов (<, >, &) и символов, используемых в атрибутах (", '), остаётся обязательным требованием для корректного синтаксического анализа HTML.

Интересные факты

  • Самая короткая именованная сущность — &AMP; (амперсанд), хотя обычно используется строчная запись &amp;. Существуют также сущности из двух символов, например &GT; и &LT;.
  • Сущность &nbsp; (неразрывный пробел) является одной из самых часто используемых, но и одной из самых критикуемых, так как её чрезмерное применение для создания отступов вместо CSS считается плохой практикой.
  • В спецификации HTML 4.01 не было сущности для апострофа (&apos;), что создавало проблемы при использовании XHTML. В HTML5 эта сущность была добавлена.

Источники

  • Спецификация HTML Living Standard (WHATWG) — раздел «Named character references».
  • Спецификация HTML 4.01 (W3C) — раздел «Character entity references in HTML».
  • Стандарт Юникод (Unicode Consortium) — таблицы символов и кодов.
  • Документация MDN Web Docs (Mozilla) — «HTML entities».

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →