В SGML и XML они не только для символов. Они представляют собой общий механизм включения, и их использование для специальных символов является лишь одним из многих случаев.
<!ENTITY signature "<hr/><p>Regards, <i>&myname;</i></p>">
<!ENTITY myname "John Doe">
Этот вид сущностей бесполезен для веб-сайтов, поскольку они работают только в режиме XML, и вы не можете использовать внешний файл DTD, не включив режим проверки в конфигурации браузера.
Сущности могут быть расширены рекурсивно. Это позволяет использовать XML для атаки типа «отказ в обслуживании» под названием «Billion Laughs Attack».
Firefox использует сущности внутренне (в XUL и так далее) для интернационализации и независимых от бренда сообщений (чтобы упростить жизнь Flock и IceWeasel):
<!ENTITY hidemac.label "Hide &brandShortName;">
<!ENTITY hidewin.label "Hide - &brandShortName;">
В HTML вам просто нужны <
, &
и "
, чтобы избежать неясностей между текстом и разметкой.
Все остальные сущности в основном устарели из-за кодировки Unicode и остаются только для удобства (но хороший текстовый редактор должен иметь макросы / фрагменты, которые могут их заменить).
В XHTML все сущности, кроме базовых, проблематичны, потому что не будут работать с автономными парсерами XML (например,
не будет работать).
Для синтаксического анализа всех сущностей XHTML требуется проверка синтаксического анализатора XML (параметр обычно называется «разрешить внешние данные»), который медленнее и требует настройки каталога DTD. Если вы проигнорируете или испортите свой каталог DTD, вы будете участвовать в DDoS на серверах W3C .