Какие символы должны быть экранированы в документах XML или где я могу найти такой список?
Какие символы мне нужно скрывать в документах XML?
Ответ 1
Если вы используете соответствующий класс или библиотеку, они будут выполнять экранирование для вас. Многие проблемы XML вызваны конкатенацией строк.
escape-символы 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='"'/>
Комментарии
Все 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 
<                               <                                     <                                     
>                               >                                    >                                     
"                                "                                "                                     
&                               &                                &                                     
'                                '                                '                                     
Обратите внимание, что вышеупомянутые сущности могут использоваться также в HTML, за исключением & apos;, который был введен с XHTML 1.0 и не объявлен в HTML 4. По этой причине и для обеспечения ретро-совместимости спецификация XHTML рекомендует использовать & # 39; вместо этого.
Ответ 4
Экранирующие символы различаются для тегов и атрибутов.
Для тегов:
 < <
 > > (only for compatibility, read below)
 & &
Для атрибутов:
" "
' '
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-экранирования
-  Всегда (90% важно помнить) 
-  Значения атрибута (важно помнить 9%) -  attr="'Одиночные кавычки'в пределах двойных кавычек."
-  attr='"Двойные кавычки"в пределах одинарных кавычек.'
-  Побег ", как"и', как'в противном случае.
 
-  
-  Комментарии, CDATA и инструкции по обработке (важно помнить о 0.9%) -  <!--Внутри комментариев-->ничего не должно быть экранировано, но нет--строки разрешены.
-  <![CDATA[Внутри CDATA]]>ничего не должно быть экранировано, но нет]]>строки разрешены.
-  <?PITargetВ НЦБ?>Ничего не надо бежать, но нет?>Строки не допускаются.
 
-  
-  Эзотерика (0.1% важно запомнить) -  Escape ]]>as]]>если]]>заканчивается секцией CDATA.
 (Это правило применяется к символьным данным вообще - даже вне раздела CDATA.)
 
-  Escape 
Ответ 7
Сокращен от: http://en.wikipedia.org/wiki/XML#Escaping
Существует пять предопределенных сущностей:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
"Все допустимые символы Юникода могут быть представлены с помощью числовой символьной ссылки". Например:
中
Большинство управляющих символов и других диапазонов юникода специально исключены, что означает (я думаю), что они не могут произойти ни с экранированием, ни с прямой:
Ответ 8
Это зависит от контекста. Для контента это & lt; и &, и]] > (хотя строка из 3 вместо одной char). Для значений атрибутов это & lt; и "и", а для "CDATA" ]] > .
Ответ 9
Они должны быть экранированы:
"   "
'   '
<   <
>   >
&   &
Ответ 10
Только < и должны быть экранированы, если они должны обрабатываться символьными данными, а не разметкой:
