Какие символы мне нужно избежать в XML-документах?
какие символы должны быть экранированы в XML-документах, или где я могу найти такой список?
9 ответов
если вы используете соответствующий класс или библиотеку, они сделают побег для вас. Многие проблемы XML вызваны конкатенацией строк.
XML escape-символы
их всего пять:
" "
' '
< <
> >
& &
экранирование символов зависит от того, где используется специальный символ.
примеры могут быть проверены на служба проверки разметки 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='"'/>
комментарии
все 5 специальных символов не должен избежать в комментариях:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
CDATA
все 5 специальных символов не должен сбежать в CDATA разделы:
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
инструкции по обработке
все 5 специальных символов не должен быть экранированным в обработке XML инструкции:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
в XML и в HTML
в HTML есть собственный набор кодов эвакуации, которые охватывают гораздо больше персонажей.
возможно, это поможет:
список ссылок на сущности символов XML и HTML:
в документах SGML, HTML и XML, логические конструкции, известные как character данных и значения атрибутов состоят из последовательности символов, в которых каждый характер может проявиться напрямую (представляя себя), или может быть представлен серией символов называется символьная ссылка, из которой есть два типа: числовой ссылка на символ и символ ссылка на сущность. В этой статье перечислены сущность символа ссылается на то, что действительны в документах HTML и XML.
в этой статье перечислены следующие пять предопределенных объектов XML:
quot "
amp &
apos '
lt <
gt >
согласно спецификациям Консорциума Всемирной паутины (w3C),есть 5 символов, которые не должны отображаться в их буквальном виде в XML-документе, за исключением случаев использования в качестве разделителей разметки или в комментарии, инструкции по обработке или разделе CDATA. Во всех остальных случаях эти символы должны быть заменены либо с помощью соответствующей сущности, либо с помощью числовой ссылки в соответствии со следующей таблицей:
Оригинал Характерзамена сущности XML XML числовая замена
>> >
" " "
& & &
' ' '
обратите внимание, что вышеупомянутые сущности могут использоваться также в HTML, за исключением ', который был введен с XHTML 1.0 и не объявлен в HTML 4. По этой причине и для обеспечения ретро-совместимости, спецификация XHTML рекомендует использовать ' вместо.
экранирование символов отличается для тегов и атрибутов.
теги:
< <
> > (only for compatibility, read below)
& &
для атрибутов:
" "
' '
http://www.w3.org/TR/2008/REC-xml-20081126/#syntax
символ амперсанда (&) и левая угловая скобка ( ) может быть представлена с помощью строка " > " и для совместимости должна быть экранирована с помощью либо ">"или ссылка на символ, когда он появляется в строке"]] > "в содержимом, когда эта строка не помечает конец CDATA раздел.
разрешить значения атрибутов содержать как одинарные, так и двойные кавычки, этот Апостроф или символ одинарной кавычки ( ' ) может быть представлен как " "и двойные кавычки (") как "" ".
в дополнение к общеизвестным пяти символам [, &, ", '] я бы также избежал символа вертикальной вкладки (0x0B). Он действителен UTF-8, но не действителен XML 1.0, и даже многие библиотеки (включая libxml2) пропускают его и молча выводят недопустимый XML.
новый, упрощенный ответ на старый, часто задаваемый вопрос...
упрощенный XML Escaping
-
всегда (90% важно помнить)
-
Значения Атрибутов (9% важно помнить)
-
attr="
'
одинарные кавычки'
в пределах двойных кавычек."
-
attr='
"
двойные кавычки"
в порядке в одинарных кавычках.'
- побег
"
as"
и'
as'
иначе.
-
-
комментарии, CDATA и Инструкции По Обработке (0.9% важно помнить)
-
<!--
внутри комментарии-->
ничего не должно быть спасено, но нет--
строк не допускаются. -
<![CDATA[
внутри CDATA]]>
ничего нужно бежать, но нет!--24--> строк не допускаются. -
<?PITarget
внутри PIs?>
ничто не должно быть спасено, но нет?>
строк не допускаются.
-
-
эзотерика (0.1% важно помнить)
- побег
]]>
as]]>
если]]>
заканчивается раздел CDATA.
(это правило применяется к символьным данным вообще-даже вне раздела CDATA.)
- побег
сокращено от:http://en.wikipedia.org/wiki/XML#Escaping
существует пять предопределенных сущностей:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
"все разрешенные символы Юникода могут быть представлены в числовой ссылки. "Например:
中
большинство управляющих символов и других диапазонов unicode специально исключены, что означает (Я думаю), что они не могут произойти либо экранированы, либо прямой:
Это зависит от контекста. Для содержимого это (хотя строка 3 вместо одного символа). Для значений атрибутов это .