Какие символы мне нужно скрывать в документах 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% важно помнить)
- Escape
<
as <
если <
не запускает <tag/>
. - Escape
&
as &
если &
не запускается &entity;
,
-
Значения атрибута (важно помнить 9%)
-
attr="
'
Одиночные кавычки '
в пределах двойных кавычек. "
-
attr='
"
Двойные кавычки "
в пределах одинарных кавычек. '
- Побег
"
, как "
и '
, как '
в противном случае.
-
Комментарии, CDATA и инструкции по обработке (важно помнить о 0.9%)
-
<!--
Внутри комментариев -->
ничего не должно быть экранировано, но нет --
строки разрешены. -
<![CDATA[
Внутри CDATA ]]>
ничего не должно быть экранировано, но нет ]]>
строки разрешены. -
<?PITarget
В НЦБ ?>
Ничего не надо бежать, но нет ?>
Строки не допускаются.
-
Эзотерика (0.1% важно запомнить)
- Escape
]]>
as ]]>
если ]]>
заканчивается секцией CDATA.
(Это правило применяется к символьным данным вообще - даже вне раздела CDATA.)
Ответ 7
Сокращен от: http://en.wikipedia.org/wiki/XML#Escaping
Существует пять предопределенных сущностей:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
"Все допустимые символы Юникода могут быть представлены с помощью числовой символьной ссылки". Например:
中
Большинство управляющих символов и других диапазонов юникода специально исключены, что означает (я думаю), что они не могут произойти ни с экранированием, ни с прямой:
http://en.wikipedia.org/wiki/Valid_characters_in_XML
Ответ 8
Это зависит от контекста. Для контента это & lt; и &, и]] > (хотя строка из 3 вместо одной char). Для значений атрибутов это & lt; и "и", а для "CDATA" ]] > .
Ответ 9
Они должны быть экранированы:
" "
' '
< <
> >
& &
Ответ 10
Только < и должны быть экранированы, если они должны обрабатываться символьными данными, а не разметкой:
http://www.w3.org/TR/xml11/#syntax