Каковы специальные символы HTML и XML?
каковы специальные зарезервированные символьные сущности в HTML и XML?
информация, которая у меня есть, говорит:
HTML:
-
&(замените&) -
<(замените<) >(замените>)-
"(заменить") '(замените')
XML-код:
-
<(замените<) -
>(замените>) -
&(замените&) -
'(замените') -
"(замените")
но я не могу найти документацию ни по одному из них.
W3C упоминает, в расширяемый язык разметки (XML) 1.0 (пятое издание), некоторые предопределенные ссылки на сущности. Но он говорит, что эти сущности предопределены (так же, как © предопределено); не то, что они должны быть экранированы:
4.6 Предопределенные Объекты
[определение: ссылки на сущности и символы могут использоваться для побег левая угловая скобка, амперсанд и другие разделители. Набор общих сущностей (amp, lt, gt, apos, quot) указывается для этого цель. Могут также использоваться числовые символьные ссылки; расширяется сразу же при распознавании и должен рассматриваться как символ данные, поэтому числовые символьные ссылки "
какие символы должны быть экранированным в ссылки на сущности в HTML-код?
Какие персонажи!--89-->должны быть экранированным в ссылки на сущности в XML?
обновление:
с расширяемый язык разметки (XML) 1.0 (пятое издание):
2.4 символьные данные и разметка
символ амперсанда (
&) и левая угловая скобка (<) не должен появляются в их буквальной форме, за исключением случаев использования в качестве разделителей разметки, или в комментарии, инструкции по обработке или разделе CDATA.
Если они нужны в другом месте, они должны быть экранированным с помощью любого числового ссылки на символы или строки "&" и "<" соответственно.правая угловая скобка (
>) может быть представлено с помощью строка">", и должны, для совместимости, следует избегать использования либо ">"или ссылка на символ, когда он появляется в строке"]]>" в содержимом, когда эта строка не помечает конец CDATA раздел.чтобы значения атрибутов содержали как одинарные, так и двойные кавычки, Апостроф или символ одинарной кавычки (
') может быть представлено как "'", и символ двойной кавычки (") как """.
я прочитал первое как говорящее, что
должно быть:
-
<(<) должно быть -
&(&) должно быть
мая, а должны при появлении как ]]>
-
>(>) должны быть, если появляется как]]>
и ' и " не надо экранировано вообще; если вы не хотите иметь кавычки внутри цитируемых атрибутов.
с спецификация HTML 4.01, представление документа HTML:
5.3.2 ссылки на сущности символов
авторы, желающие поставить "
<"символ в тексте должен использовать"<" (ASCII decimal 60), чтобы избежать возможной путаницы с началом тег (начать тег открыть разделитель).аналогично, авторы должны использовать "
>" (ASCII decimal 62) в тексте вместо ">", чтобы избежать проблем со взрослыми агенты пользователей, которые неправильно воспринимают это как конец тега (тег закрыть разделитель), когда он появляется в кавычках значений атрибутов.авторы должны использовать "
&"(ASCII decimal 38) вместо"&", чтобы избежать путаница с началом символьной ссылки (entity ссылка открыть разделитель). Авторы также должны использовать "&" in значения атрибутов, поскольку ссылки на символы разрешены в CDATA значение атрибута.некоторые авторы используют ссылку на сущность символа"
"" кодировать экземпляры двойной кавычки (") так как этот символ может быть используется для разграничения значений атрибутов.
HTML гораздо более wishy-washy по правилам, но похоже, что я должны:
-
<должна быть с< -
>должен быть с> -
&должен быть с& -
"должен быть с"
и если " может быть ссылкой на сущность, я также должен заменить ' С &.
Обновить Два
с HTML5-словарь и связанные с ним API для HTML и XHTML:
8.3 сериализации Фрагменты HTML-кода
убегающую строку (для целей приведенного выше алгоритма) состоит выполнения следующих шагов:
заменить все вхождения "
&"символ по строке"&".замените все вхождения символа пробела без перерыва U+00A0 символом строка"
".если алгоритм был вызван в режиме атрибут, заменить вхождений "
""символ строкой""".если алгоритм не был вызван в режиме атрибут, заменить случаи "
<"символ по строке"<", и любой случаи ">"символ по строке">".
который я читаю как HTML-код:
-
&by&всегда -
by всегда -
"by"если это внутри атрибута -
<by<если это не в атрибуте (т. е. атрибуты могут содержать<) -
>by>если это не в атрибуте (т. е. атрибуты могут содержать>)
1 ответов
во-первых, вы сравниваете спецификация HTML 4.01 С HTML 5 one. HTML5 более тесно связан с XML, чем HTML 4.01 (поэтому у нас есть XHTML), поэтому этот ответ будет придерживаться HTML 5 и XML.
ваши цитируемые ссылки согласуются по следующим пунктам:
-
<всегда должен быть представлен с<при отсутствии указания инструкции по обработке -
>должны всегда будьте представлены с>при отсутствии указания инструкции по обработке -
&всегда должен быть представлен с& -
за исключением, когда в
<![CDATA[ ]]>(который применяется только к XML)
я согласен с этим на 100%. Вы никогда не хотите, чтобы парсер ошибочно принимал литералы за инструкции, поэтому всегда нужно кодировать любой символ без пробела (см. ниже). Хорошие Парсеры знают, что все, что содержится внутри <![CDATA[ ]]> несколько не инструкции, поэтому кодировка там не нужна.
на практике я никогда не кодирую ' или " если
- он появляется в пределах значения атрибута (XML или HTML)
- он появляется в тексте XML-тегов. (
<tag>"Yoinks!", he said.</tag>)
обе спецификации также соглашаются с этим.
таким образом, единственным пунктом раздора является (space). The only mention of it in either specification is when serialization is attempted. When not, you should always use a literal (пробел). Если вы не пишете свой собственный парсер, я не вижу нужно делать какую-либо сериализацию, так что это не имеет значения.