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