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

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

Ответы

Ответ 1

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

escape-символы XML

Всего пять:

"   "
'   '
<   &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 имеет свой собственный код escape-кодов, который покрывает намного больше символов.

Ответ 2

Возможно, это поможет:

Список ссылок на символы XML и HTML:

В документах SGML, HTML и XML, логические конструкции, известные как символ данные и значения атрибутов состоят из последовательности символов, в которых каждый персонаж может проявляться напрямую (представляющий себя), или может быть представленный рядом символов называется символьной ссылкой, из которых существует два типа: числовое символьная ссылка и символ ссылка на объект. В этой статье перечислены объект символа ссылается на действительны в документах HTML и XML.

В этой статье перечислены следующие пять предопределенных XML-объектов:

quot  "
amp   &
apos  '
lt    <
gt    >

Ответ 3

В соответствии со спецификациями Консорциума World Wide Web (w3C) существует 5 символов, которые не должны отображаться в их литеральной форме в документе XML, за исключением случаев, когда они используются в качестве разделителей разметки или в комментарии, инструкции обработки или секции CDATA. Во всех остальных случаях эти символы должны быть заменены либо с использованием соответствующего объекта, либо с помощью числовой ссылки в соответствии со следующей таблицей:

Original Character XML entity replacement XML numeric replacement
<                               &lt;                                     &#60;                                    
>                               &gt;                                    &#62;                                    
"                                &quot;                                &#34;                                    
&                               &amp;                                &#38;                                    
'                                &apos;                                &#39;                                    

Обратите внимание, что вышеупомянутые сущности могут использоваться также в HTML, за исключением & apos;, который был введен с XHTML 1.0 и не объявлен в HTML 4. По этой причине и для обеспечения ретро-совместимости спецификация XHTML рекомендует использовать & # 39; вместо этого.

Ответ 4

Экранирующие символы различаются для тегов и атрибутов.

Для тегов:

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

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

" &quot;
' &apos;

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

Символ амперсанда (&) и левый угловой кронштейн (<) не должны появляются в их буквальной форме, за исключением случаев, когда они используются в качестве разделителей разметки, или в комментарии, инструкции обработки или секции CDATA. Если они необходимы в другом месте, они должны быть экранированы с использованием либо числовых символьные ссылки или строки "&" и "& lt;" соответственно. Прямая угловая скобка ( > ) может быть представлена ​​с помощью string " > " и для совместимости должны быть экранированы с использованием либо "& gt;" или ссылку на символ, когда она появляется в строке "]] > " по содержанию, когда эта строка не маркирует конец CDATA раздел.

Чтобы значения атрибутов содержали как одинарные, так и двойные кавычки, апостроф или символ с одной кавычкой (') могут быть представлены как "& APOS;", и символ двойной кавычки ( ") как" "".

Ответ 5

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

Ответ 6

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

Упрощение XML-экранирования

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

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

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

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

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

Ответ 7

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

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

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

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

&#20013;

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

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

Ответ 8

Это зависит от контекста. Для контента это & ​​lt; и &, и]] > (хотя строка из 3 вместо одной char). Для значений атрибутов это & ​​lt; и "и", а для "CDATA" ]] > .

Ответ 9

Они должны быть экранированы:

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

Ответ 10

Только < и должны быть экранированы, если они должны обрабатываться символьными данными, а не разметкой:

http://www.w3.org/TR/xml11/#syntax