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-сущности делятся на два основных типа: именованные (мнемонические) и числовые.
Именованные сущности
Именованные сущности представляют собой короткие буквенные мнемокоды, начинающиеся с амперсанда (&) и заканчивающиеся точкой с запятой (;). Они проще для запоминания и чтения человеком, чем числовые коды. Например:
&— амперсанд (&). Необходим для отображения самого символа амперсанда, иначе браузер может воспринять его как начало новой сущности.<— знак «меньше» (<).>— знак «больше(>`)."— двойная кавычка (").'— апостроф (одинарная кавычка,'). Включён в стандарт XHTML и HTML5, но не был в HTML 4.01. — неразрывный пробел. Предотвращает перенос строки между словами и не позволяет браузеру схлопнуть несколько пробелов в один.©— знак авторского права (©).®— знак зарегистрированной торговой марки (®).€— символ евро (€).—— длинное тире (—).
Общее количество именованных сущностей в стандарте HTML5 составляет более 2200. Они охватывают латиницу, греческий алфавит, кириллицу (частично), математические операторы, стрелки, геометрические фигуры и другие символы.
Числовые сущности
Числовые сущности позволяют вставить любой символ из таблицы Юникод по его числовому коду. Они также начинаются с & и заканчиваются ;, но после амперсанда следует символ решётки (#). Существует два подтипа:
- Десятичные сущности: Используют десятичный код символа. Синтаксис:
&#N;(где N — десятичное число). Пример:©— знак авторского права (©). - Шестнадцатеричные сущности: Используют шестнадцатеричный код символа. Синтаксис:
&#xN;или&#X N;(где N — шестнадцатеричное число, буквы A-F могут быть как заглавными, так и строчными). Пример:©— знак авторского права (©). Шестнадцатеричная запись часто предпочтительнее, так как она напрямую соответствует коду символа в стандарте Юникод (например, U+00A9).
Числовые сущности универсальны и позволяют отобразить любой символ из диапазона Юникод, даже если для него нет именованного мнемокода.
Применение
Основные области применения HTML-сущностей:
- Экранирование зарезервированных символов: Это основная и исторически первая функция. Без использования сущностей
<и>браузер интерпретировал бы<и>как начало или конец тега, что привело бы к искажению отображения или ошибке валидации. Например, для отображения в тексте фрагмента кода<div>необходимо написать<div>. - Отображение символов, отсутствующих на клавиатуре: Сущности позволяют легко вставлять типографские знаки (длинное тире, кавычки-ёлочки
«и»), знаки валют (£— фунт стерлингов,¥— иена), математические символы (∑— сумма,π— пи), стрелки (→— стрелка вправо) и т.д. - Обеспечение корректного отображения при проблемах с кодировкой: Если веб-страница сохранена в кодировке, отличной от UTF-8 (например, Windows-1251), и в ней встречаются символы, не входящие в эту кодировку, использование числовых сущностей гарантирует их корректное отображение в браузере независимо от настроек кодировки документа.
- Предотвращение XSS-атак: В веб-разработке при выводе пользовательского контента (например, комментариев) на страницу, все потенциально опасные символы (особенно
<,>,&,",') должны быть заменены на соответствующие HTML-сущности. Это предотвращает внедрение вредоносного кода (Cross-Site Scripting, XSS), который может быть интерпретирован браузером как скрипт или тег. - Создание неразрывных конструкций: Использование
(неразрывного пробела) между числами и единицами измерения (например, «100 кг») или инициалами и фамилией (например, «А. С. Пушкин») предотвращает разрыв этих элементов при переносе строки.
Примеры использования
| Символ | Описание | Именованная сущность | Десятичная сущность |
|---|---|---|---|
< | Знак «меньше» | < | < |
> | Знак «больше» | > | > |
& | Амперсанд | & | & |
" | Двойная кавычка | " | " |
' | Апостроф | ' | ' |
© | Знак копирайта | © | © |
® | Зарегистрированная марка | ® | ® |
€ | Евро | € | € |
— | Длинное тире | — | — |
← | Стрелка влево | ← | ← |
Критика и альтернативы
Несмотря на широкое распространение, использование HTML-сущностей имеет некоторые недостатки:
- Читаемость исходного кода: Обилие сущностей, особенно длинных именованных или числовых, может сильно ухудшить читаемость HTML-кода для человека. Например, текст, содержащий множество математических символов, становится трудным для редактирования.
- Избыточность: С повсеместным переходом на кодировку UTF-8 необходимость в использовании сущностей для большинства символов (кроме зарезервированных) отпала. Современные редакторы и системы управления контентом (CMS) позволяют вставлять любые символы Юникода напрямую, что делает код чище.
- Сложность запоминания: Существует более 2000 именованных сущностей, и запомнить их все невозможно. Разработчики часто вынуждены обращаться к справочным таблицам.
Альтернативой использованию сущностей для отображения специальных символов является прямая вставка символов Юникода в HTML-документ, сохранённый в кодировке UTF-8. Этот подход рекомендуется современными стандартами веб-разработки, так как он упрощает код и снижает вероятность ошибок. Однако экранирование зарезервированных символов (<, >, &) и символов, используемых в атрибутах (", '), остаётся обязательным требованием для корректного синтаксического анализа HTML.
Интересные факты
- Самая короткая именованная сущность —
&(амперсанд), хотя обычно используется строчная запись&. Существуют также сущности из двух символов, например>и<. - Сущность
(неразрывный пробел) является одной из самых часто используемых, но и одной из самых критикуемых, так как её чрезмерное применение для создания отступов вместо CSS считается плохой практикой. - В спецификации HTML 4.01 не было сущности для апострофа (
'), что создавало проблемы при использовании 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 →