Каковы специальные зарезервированные символьные сущности в HTML и XML?
Информация, которая у меня есть, говорит:
HTML:
&
(заменить на&
)<
(заменить на<
)>
(заменить на>
)"
(заменить на"
)'
(заменить на'
)
XML:
<
(заменить на<
)>
(заменить на>
)&
(заменить на&
)'
(заменить на'
)"
(заменить на"
)
Но я не могу найти документации ни по одному из них.
W3C действительно упоминает в Extensible Markup Language (XML ) 1.0 (пятое издание), некоторые предопределенные ссылки на сущности. Но в нем говорится, что эти сущности предопределены (точно так же, как ©
); не то, чтобы их нужно было избегать:
4.6 Предопределенные объекты
[Определение: ссылки на сущности и символы могут использоваться для выхода левой угловой скобки, амперсанда и других разделителей. Для этого указывается набор общих сущностей (amp, lt, gt, apos, quot). Также могут использоваться числовые ссылки на символы; они раскрываются сразу после распознавания и должны рассматриваться как символьные данные, поэтому числовые символьные ссылки «<» и «&» могут использоваться для экранирования ‹и &, когда они встречаются в символьных данных.]
Какие символы необходимо экранировать в ссылках на объекты в HTML? Какие символы необходимо экранировать в ссылках на сущности в XML?
Обновление:
Из Extensible Markup Language (XML) 1.0 (пятое издание):
2.4 Символьные данные и разметка
Символ амперсанда (
&
) и левая угловая скобка (<
) не должны появляться в их буквальной форме, за исключением случаев, когда они используются в качестве разделителей разметки или внутри комментария, инструкции обработки или раздела CDATA. Если они нужны где-то еще, их необходимо экранировать, используя либо числовые ссылки на символы, либо строки «&
» и «<
» соответственно.Правая угловая скобка (
>
) может быть представлена строкой «>
», а должна для совместимости экранировать либо «>
», либо ссылку на символ, когда она появляется в строке «]]>
». в содержимом, когда эта строка не отмечает конец раздела CDATA.Чтобы значения атрибутов могли содержать как одинарные, так и двойные кавычки, апостроф или символ одинарной кавычки (
'
) можно представить как «'
», а символ двойной кавычки ("
) как «"
».
Я читаю первое, говоря, что
должно быть:
<
(<
) должен быть&
(&
) должен быть
может, но обязательно при отображении как ]]>
>
(>
) должно быть, если отображается как]]>
И от этих '
и "
вообще не нужно экранировать; если вы не хотите иметь кавычки внутри цитируемых атрибутов.
Из спецификации HTML 4.01, представление документа HTML:
5.3.2 Ссылки на символьные сущности
Авторы, желающие поместить в текст символ «
<
», должны использовать «<
» (десятичный ASCII 60), чтобы избежать возможной путаницы с началом тега (открывающий разделитель начального тега).Точно так же авторы должны использовать в тексте «
>
» (десятичное ASCII 62) вместо «>
», чтобы избежать проблем со старыми пользовательскими агентами, которые неправильно воспринимают это как конец тега (закрывающий разделитель тега), когда он появляется в значениях атрибутов в кавычках.Авторам следует использовать «
&
» (38 в десятичном формате ASCII) вместо «&
», чтобы избежать путаницы с началом ссылки на символ (открытый разделитель ссылки на сущность). Авторам также следует использовать "&
" в значениях атрибутов, поскольку в значениях атрибутов CDATA разрешены символьные ссылки.Некоторые авторы используют ссылку на символьную сущность «
"
» для кодирования экземпляров двойных кавычек ("
), поскольку этот символ может использоваться для разграничения значений атрибутов.
HTML гораздо менее строг в отношении правил, но похоже, что я должен:
<
должно быть с<
>
должно быть с>
&
должен быть с&
"
должно быть с"
И если "
может быть ссылкой на сущность, я должен также заменить '
на &
.
Обновление два
Из HTML5 - словарь и связанные API для HTML и XHTML:
8.3 Сериализация фрагментов HTML
Экранирование строки (для целей приведенного выше алгоритма) состоит из выполнения следующих шагов:
Замените любое вхождение символа «
&
» строкой «&
».Замените все вхождения символа U + 00A0 NO-BREAK SPACE строкой «
».Если алгоритм был вызван в режиме атрибутов, замените все вхождения символа «
"
» строкой «"
».Если алгоритм не был запущен в режиме атрибутов, замените все вхождения символа «
<
» строкой «<
» и любые вхождения символа «>
» строкой «>
».
Я читаю его как HTML:
&
от&
всегдаby
всегда"
от"
, если он находится внутри атрибута<
от<
, если его нет в атрибуте (т. Е. Атрибуты могут содержать<
)>
на>
, если его нет в атрибуте (т. Е. Атрибуты могут содержать>
)
>
(в атрибуте или нет). - person LarsH   schedule 15.02.2012