Какие символы мне нужно избежать в XML-документах?

какие символы должны быть экранированы в XML-документах, или где я могу найти такой список?

9 ответов


если вы используете соответствующий класс или библиотеку, они сделают побег для вас. Многие проблемы XML вызваны конкатенацией строк.

XML escape-символы

их всего пять:

"   "
'   '
<   &lt;
>   &gt;
&   &amp;

экранирование символов зависит от того, где используется специальный символ.

примеры могут быть проверены на служба проверки разметки 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 рекомендует использовать ' вместо.


экранирование символов отличается для тегов и атрибутов.

теги:

 < &lt;
 > &gt; (only for compatibility, read below)
 & &amp;

для атрибутов:

" &quot;
' &apos;

http://www.w3.org/TR/2008/REC-xml-20081126/#syntax

символ амперсанда (&) и левая угловая скобка ( ) может быть представлена с помощью строка " > " и для совместимости должна быть экранирована с помощью либо ">"или ссылка на символ, когда он появляется в строке"]] > "в содержимом, когда эта строка не помечает конец CDATA раздел.

разрешить значения атрибутов содержать как одинарные, так и двойные кавычки, этот Апостроф или символ одинарной кавычки ( ' ) может быть представлен как " "и двойные кавычки (") как "" ".


в дополнение к общеизвестным пяти символам [, &, ", '] я бы также избежал символа вертикальной вкладки (0x0B). Он действителен UTF-8, но не действителен XML 1.0, и даже многие библиотеки (включая libxml2) пропускают его и молча выводят недопустимый XML.


новый, упрощенный ответ на старый, часто задаваемый вопрос...

упрощенный XML Escaping

  1. всегда (90% важно помнить)

    • побег < as &lt; если < начинается <tag/>.
    • побег & as &amp; если & is начиная с &entity;.
  2. Значения Атрибутов (9% важно помнить)

    • attr=" 'одинарные кавычки' в пределах двойных кавычек."
    • attr=' "двойные кавычки" в порядке в одинарных кавычках.'
    • побег " as &quot; и ' as &apos; иначе.
  3. комментарии, CDATA и Инструкции По Обработке (0.9% важно помнить)

    • <!-- внутри комментарии --> ничего не должно быть спасено, но нет -- строк не допускаются.
    • <![CDATA[ внутри CDATA ]]> ничего нужно бежать, но нет!--24--> строк не допускаются.
    • <?PITarget внутри PIs ?> ничто не должно быть спасено, но нет ?> строк не допускаются.
  4. эзотерика (0.1% важно помнить)

    • побег ]]> as ]]&gt; если ]]> заканчивается раздел CDATA.
      (это правило применяется к символьным данным вообще-даже вне раздела CDATA.)

сокращено от:http://en.wikipedia.org/wiki/XML#Escaping

существует пять предопределенных сущностей:

&lt; represents "<"
&gt; represents ">"
&amp; represents "&"
&apos; represents '
&quot; represents "

"все разрешенные символы Юникода могут быть представлены в числовой ссылки. "Например:

&#20013;

большинство управляющих символов и других диапазонов unicode специально исключены, что означает (Я думаю), что они не могут произойти либо экранированы, либо прямой:

http://en.wikipedia.org/wiki/Valid_characters_in_XML


Это зависит от контекста. Для содержимого это (хотя строка 3 вместо одного символа). Для значений атрибутов это .