Какие символы должны быть экранированы в документах XML, или где я могу найти такой список?
Какие символы должны быть экранированы в документах XML, или где я могу найти такой список?
Ответы:
Если вы используете соответствующий класс или библиотеку, они помогут вам. Многие проблемы XML вызваны конкатенацией строк.
Всего пять:
" "
' '
< <
> >
& &
Экранирование символов зависит от того, где используется специальный символ.
Примеры могут быть проверены в Службе проверки разметки W3C .
Безопасный способ - экранировать все пять символов в тексте. Тем не менее, три символа "
, '
и >
не должны быть экранированы в тексте:
<?xml version="1.0"?>
<valid>"'></valid>
Безопасный способ - экранировать все пять символов в атрибутах. Однако >
персонажу не обязательно экранироваться в атрибутах:
<?xml version="1.0"?>
<valid attribute=">"/>
Символ '
не должен быть экранирован в атрибутах, если кавычки "
:
<?xml version="1.0"?>
<valid attribute="'"/>
Аналогично, "
нет необходимости экранироваться в атрибутах, если кавычки '
:
<?xml version="1.0"?>
<valid attribute='"'/>
Все пять специальных символов не должны быть экранированы в комментариях:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
Все пять специальных символов не должны быть экранированы в разделах CDATA :
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
Все пять специальных символов не должны быть экранированы в инструкциях обработки XML:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
HTML имеет свой собственный набор escape-кодов, который охватывает гораздо больше символов.
"
будут изменены на&quot;
Возможно, это поможет:
Список ссылок на сущности символов XML и HTML :
В документах SGML, HTML и XML логические конструкции, известные как символьные данные и значения атрибутов, состоят из последовательностей символов, в которых каждый символ может проявляться непосредственно (представлять себя) или может быть представлен серией символов, называемых символьной ссылкой, из которых есть два типа: числовая ссылка на символ и ссылка на символьную сущность. В этой статье перечислены ссылки на сущности символов, действительные в документах HTML и XML.
В этой статье перечислены следующие пять предопределенных сущностей XML:
quot "
amp &
apos '
lt <
gt >
В соответствии со спецификациями Консорциума World Wide Web (w3C), существует 5 символов, которые не должны появляться в их буквальном виде в документе XML , за исключением случаев, когда они используются в качестве разделителей разметки или внутри комментария, инструкции по обработке или раздела CDATA. , Во всех остальных случаях эти символы должны быть заменены с использованием соответствующей сущности или числовой ссылки в соответствии со следующей таблицей:
Original CharacterXML entity replacementXML numeric replacement
< < <
> > >
" " "
& & &
' ' '
Обратите внимание, что вышеупомянутые объекты могут использоваться также в HTML, за исключением & apos; , который был представлен в XHTML 1.0 и не объявлен в HTML 4. По этой причине и для обеспечения ретро-совместимости спецификация XHTML рекомендует использовать & # 39; вместо.
>
должен быть экранирован, если он следует ]]
внутри содержимого, если только он не является частью ]]>
разделителя, обозначающего конец раздела CDATA.
Экранирование символов отличается для тегов и атрибутов.
Для тегов:
< <
> > (only for compatibility, read below)
& &
Для атрибутов:
" "
' '
Из символьных данных и разметки :
Символ амперсанда (&) и левая угловая скобка (<) не должны появляться в их буквальной форме, за исключением случаев, когда они используются в качестве разделителей разметки или внутри комментария, инструкции обработки или раздела CDATA. Если они нужны где-то еще, их необходимо экранировать, используя либо числовые ссылки на символы, либо строки "& amp;" и "& lt;" соответственно. Правая угловая скобка (>) может быть представлена с помощью строки "& gt;" и для совместимости должна быть экранирована с помощью "& gt;" или ссылки на символ, когда она появляется в строке "]]>" в содержимом, когда эта строка не обозначает конец раздела CDATA.
Чтобы значения атрибутов могли содержать как одинарные, так и двойные кавычки, символ апострофа или одинарной кавычки (') может быть представлен как "& apos;", а символ двойной кавычки (") -" & quot; ».
Новый, упрощенный ответ на старый, часто задаваемый вопрос ...
Всегда (90% важно помнить)
Значения атрибутов (9% важно помнить)
attr="
'
Одиночные кавычки '
в порядке в двойных кавычках."
attr='
"
Двойные кавычки"
в пределах одинарных кавычек.'
"
как "
и '
как '
иначе.Комментарии , CDATA и инструкции по обработке (0,9% важно запомнить)
<!--
В комментариях -->
ничего не нужно избегать, но нет--
строки не допускаются.<![CDATA[
Внутри CDATA ]]>
ничего не нужно избегать, но нет]]>
строки не допускаются.<?PITarget
Внутри PI ?>
ничего нельзя экранировать, но ?>
строки не допускаются.Эзотерика (0,1% важно запомнить)
]]>
как ]]>
если ]]>
не заканчивается раздел CDATA. ]]>
необходимо экранировать ]]>
, даже если он не находится в разделе CDATA. Самый простой способ достижения , которые могут быть всегда бежать , >
как >
.
]]>
но решил отнести ее к эзотерике, а не предлагать >
всегда избегать (чего, как вы знаете, не должно быть). Моя цель - сделать так, чтобы XML-экранирующие правила легко запоминались и были на 100% точными .
AttValue
цитируется в моем ответе по ссылке на 2. Значения атрибутов .
В дополнение к общеизвестным пяти символам [<,>, &, "и '] я бы также экранировал символ вертикальной табуляции (0x0B). Это допустимый UTF-8, но не действительный XML 1.0 и даже многие библиотеки (включая очень переносимую (ANSI C) библиотеку libxml2 ) пропускает ее и молча выводит неверный XML.
Сокращенный от: XML, Escape
Есть пять предопределенных объектов:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
«Все разрешенные символы Юникода могут быть представлены с помощью цифровой символьной ссылки». Например:
中
Большинство управляющих символов и другие диапазоны Юникода специально исключены, а это означает (я думаю), что они не могут быть ни экранированными, ни прямыми:
Это зависит от контекста. Для содержания это < и & , и ]]> (хотя строка из трех вместо одного символа).
Для значений атрибутов это < , & , " и ' .
Для CDATA это ]]> .
Только <
и &
должны быть экранированы, если они должны обрабатываться символьными данными, а не разметкой:
<company>AT&T</company>