Вопрос по character, xml – Какие символы мне нужно экранировать в документах XML?

836

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

Пример:<company>AT&amp;T</company> jacktrades
УвидетьSimplified XML Escaping ниже для краткого и легко запоминающегося руководства, которое я извлек из первоисточников (W3C Extensible Markup Language (XML) 1.0 (Fifth Edition)). kjhughes

Ваш Ответ

9   ответов
5

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

Есть пять предопределенных объектов:

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

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

&#20013;

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

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

1227

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

XML escape characters

Всего пять:

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

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

Примеры могут быть проверены наСлужба проверки разметки W3C.

Text

Безопасный способ - экранировать все пять символов в тексте, однако три символа", ' а также> не нужно экранировать в тексте:

<?xml version="1.0"?>
<valid>"'></valid>

Attributes

Безопасным способом является экранирование всех пяти символов в атрибутах, однако> символ не должен быть экранирован в атрибутах:

<?xml version="1.0"?>
<valid attribute=">"/>

' символ не должен быть экранирован в атрибутах, если кавычки":

<?xml version="1.0"?>
<valid attribute="'"/>

Аналогично" не нужно экранироваться в атрибутах, если кавычки':

<?xml version="1.0"?>
<valid attribute='"'/>

Comments

Все 5 специальных персонажейmust not избегать в комментариях:

<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>

CDATA

Все 5 специальных персонажейmust not сбежать вCDATA разделы:

<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>

Processing instructions

Все 5 специальных персонажейmust not быть экранированным в инструкциях обработки XML:

<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>

XML vs. HTML

HTML имеетсвой собственный набор escape-кодов которые охватывают гораздо больше персонажей.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededw3.org/TR/xml/#syntax
46

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

Для тегов:

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

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

" &quot;
' &apos;

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

The ampersand character (&) and the left angle bracket (<) must not appear in their literal form, except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section. If they are needed elsewhere, they must be escaped using either numeric character references or the strings " &amp; " and " &lt; " respectively. The right angle bracket (>) may be represented using the string " &gt; ", and must, for compatibility, be escaped using either " &gt; " or a character reference when it appears in the string " ]]> " in content, when that string is not marking the end of a CDATA section.

To allow attribute values to contain both single and double quotes, the apostrophe or single-quote character (') may be represented as " &apos; ", and the double-quote character (") as " &quot; ".

Error: User Rate Limit Exceeded
88

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

List of XML and HTML character entity references:

In SGML, HTML and XML documents, the logical constructs known as character data and attribute values consist of sequences of characters, in which each character can manifest directly (representing itself), or can be represented by a series of characters called a character reference, of which there are two types: a numeric character reference and a character entity reference. This article lists the character entity references that are valid in HTML and XML documents.

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

quot  "
amp   &
apos  '
lt    <
gt    >
19

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

-3

Только & lt; и & amp; требуется экранировать, если должны обрабатываться символьные данные, а не разметка:

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

67

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

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededw3.org/TR/REC-xml/#NT-CharDataError: User Rate Limit Exceeded
Error: User Rate Limit Exceededofficial recommendations for XML by W3C.
3

Это зависит от контекста. Для содержания это & lt; и & amp; и]] & gt; (хотя строка 3 вместо одного символа). Для значений атрибутов это & lt; и & amp; и & quot; и '. Для CDATA это]] & gt ;.

15

New, simplified answer to an old, commonly asked question...

Simplified XML Escaping

  1. Always (90% important to remember)

    • Escape < as &lt; unless < is starting a <tag/>.
    • Escape & as &amp; unless & is starting an &entity;.
  2. Attribute Values (9% important to remember)

    • attr=" 'Single quotes' are ok within double quotes."
    • attr=' "Double quotes" are ok within single quotes.'
    • Escape " as &quot; and ' as &apos; otherwise.
  3. Comments, CDATA, and Processing Instructions (0.9% important to remember)

    • <!-- Within comments --> nothing has to be escaped but no -- strings are allowed.
    • <![CDATA[ Within CDATA ]]> nothing has to be escaped, but no ]]> strings are allowed.
    • <?PITarget Within PIs ?> nothing has to be escaped, but no ?> strings are allowed.
  4. Esoterica (0.1% important to remember)

    • Escape ]]> as ]]&gt; unless ]]> is ending a CDATA section.
      (This rule applies to character data in general – even outside a CDATA section.)
Стоит отметить еще одно правило:]]> должен быть экранирован как]]&gt;, даже если не в разделе CDATA. Самым простым способом достижения этого может бытьalways побег> как&gt;.
Спасибо, @MichaelKay. Я включил вашу полезную заметку о]]>  но решил отнести его к эзотерике, а не предлагать> always быть сбежавшим (что, как вы знаете, не должно быть). Моя цель состоит в том, чтобы сделать XML-экранирование правилeasily remembered and 100% accurate.

Похожие вопросы