Каковы специальные символы 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>
если это не в атрибуте (т. е. атрибуты могут содержать>
)
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
(пробел). Если вы не пишете свой собственный парсер, я не вижу нужно делать какую-либо сериализацию, так что это не имеет значения.