Jakie znaki są potrzebne do ucieczki w dokumentach XML?

Jakie znaki muszą być przechowywane w dokumentach XML lub Gdzie mogę znaleźć taką listę?

Author: animuson, 2009-07-07

9 answers

Jeśli użyjesz odpowiedniej klasy lub biblioteki, zrobią to za Ciebie. Wiele problemów XML jest powodowanych przez konkatenację łańcuchów.

XML escape characters

Jest tylko pięć:

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

Znaki specjalne zależą od miejsca użycia znaku specjalnego.

Przykłady można zwalidować w W3C Markup Validation Service .

Tekst

Bezpiecznym sposobem jest ucieczka wszystkich pięciu znaków w tekście, jednak trzy postacie ", ' i > nie musi być w tekście:

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

Atrybuty

W atrybutach nie trzeba jednak uciekać przed wszystkimi pięcioma znakami, ponieważ znak > w atrybutach nie musi być uciekany:
<?xml version="1.0"?>
<valid attribute=">"/>

Znak ' nie musi być unikany w atrybutach, jeśli cudzysłowy są ":

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

Podobnie, " nie musi być unikany w atrybutach, jeśli cudzysłowy są ':

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

Komentarze

Wszystkie 5 znaków specjalnych nie wolno unikać w komentarzach:

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

CDATA

Wszystkie 5 znaków specjalnych nie mogą być przechowywane w sekcjach CDATA:

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

Instrukcje przetwarzania

Wszystkie 5 znaków specjalnych nie mogą zawierać w instrukcjach przetwarzania XML:

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

XML vs. HTML

HTML ma własny zestaw kodów ewakuacyjnych , które obejmują dużo więcej znaków.

 1171
Author: Welbog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-02 13:27:27

Być może to pomoże:

Lista odniesień do encji znaków XML i HTML:

W dokumentach SGML, HTML i XML, konstrukcje logiczne znane jako znak na dane i wartości atrybutów składają się sekwencje znaków, w których każdy postać może manifestować się bezpośrednio (reprezentowanie siebie), lub może być reprezentowana przez szereg postaci nazywany referencją znakową, z czego istnieją dwa typy: numeryczny znak odniesienia i a charakter / align = "left" / Ten artykuł zawiera listę podmiot znak odwołuje się do tego są ważne w dokumentach HTML i XML.

Ten artykuł wymienia pięć predefiniowanych encji XML:

quot  "
amp   &
apos  '
lt    <
gt    >
 88
Author: Andrew Hare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-07 18:33:16

Zgodnie ze specyfikacją World Wide Web Consortium (W3C), Istnieje 5 znaków, które nie mogą pojawić się w dosłownej formie w dokumencie XML, chyba że są używane jako ograniczniki znaczników lub w komentarzu, instrukcji przetwarzania lub sekcji CDATA. We wszystkich pozostałych przypadkach znaki te należy zastąpić za pomocą odpowiedniego podmiotu lub odniesienia numerycznego zgodnie z następującą tabelą:

Oryginalny charakterXML zastąpienie podmiotuXML numeric replacement

> > >
" "                               "                                    
&                              &                               &                                    
'                               '                               '                                    

Zauważ, że powyższe encje mogą być używane również w HTML, z wyjątkiem ', który został wprowadzony z XHTML 1.0 i nie jest deklarowany w HTML 4. Z tego powodu, aby zapewnić kompatybilność wsteczną, Specyfikacja XHTML zaleca użycie zamiast tego " .

 67
Author: Albz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-03 12:38:30

Znaki specjalne różnią się dla znaczników i atrybutów.

Dla tagów:

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

Dla atrybutów:

" &quot;
' &apos;

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

Znak ampersand ( & ) i lewy nawias kątowy ( ) można przedstawić za pomocą string">", I musi, dla kompatybilności, być unikalny przy użyciu albo ">"lub odniesienie do znaku, gdy pojawia się w łańcuchu"]] > "w treści, gdy ciąg ten nie oznacza końca CDATA sekcja.

Aby wartości atrybutów zawierały zarówno pojedyncze, jak i podwójne cudzysłowy, apostrof lub znak jednokrotnego cytowania ( " ) może być reprezentowana jako " '", oraz znak podwójnego cudzysłowu (") jako """.

 45
Author: Peter Bartels,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-27 21:39:32

Oprócz powszechnie znanych pięciu znaków [, &, ", '] chciałbym również uciec pionowy znak tabulacji (0x0b). Jest poprawny UTF-8, ale nie poprawny XML 1.0 i nawet wiele bibliotek (w tym libxml2) tego nie rozumie i po cichu wypisuje nieprawidłowy XML.

 19
Author: Charon ME,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-25 18:23:37

Nowa, uproszczona odpowiedź na Stare, Często zadawane pytanie...

Uproszczona Ucieczka XML

  1. Zawsze (90% Ważne do zapamiętania)

    • Escape < as &lt; unless < is starting a <tag/>.
    • Escape & as &amp; unless & is starting an &entity;.
  2. Wartości Atrybutów (9% Ważne do zapamiętania)

    • attr=" 'pojedyncze cudzysłowy ' są w porządku w cudzysłowach podwójnych."
    • attr=' "podwójne cudzysłowy " są w porządku w pojedynczych cudzysłowach.'
    • Ucieczka " jako &quot; i ' jako &apos; w przeciwnym razie.
  3. Komentarze, CDATA i instrukcje przetwarzania (0.9% ważne dla pamiętaj)

    • <!-- wewnątrz komentarze --> nic nie musi być uciekane, ale żadne -- stringi nie są dozwolone.
    • <![CDATA[wewnątrz CDATA ]]> nic nie musi być uciekane, ale żadne ]]> stringi nie są dozwolone.
    • <?PITargetW PIs ?> nic nie musi być uciekane, ale żadne ?> stringi nie są dozwolone.
  4. Ezoteryka (0.1% ważne dla pamiętaj)

    • Escape ]]> as ]]&gt; unless ]]> is ending a CDATA section.
      (zasada ta dotyczy danych znakowych w ogóle – nawet poza sekcją CDATA.)
 10
Author: kjhughes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-03 13:34:55

Skrócony od: http://en.wikipedia.org/wiki/XML#Escaping

Istnieje pięć predefiniowanych Bytów:

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

" wszystkie dozwolone znaki Unicode mogą być reprezentowane za pomocą numerycznego odniesienia. "Na przykład:

&#20013;

Większość znaków sterujących i innych zakresów unicode jest specjalnie wykluczona, co oznacza (myślę), że nie mogą wystąpić ani Escape, ani direct:

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

 4
Author: Tim Cooper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-15 07:53:58

To zależy od kontekstu. Dla zawartości jest to (chociaż łańcuch 3 zamiast jednego znaku). Dla wartości atrybutów jest to .

 3
Author: 把友情留在无盐,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-04 14:36:52
 -3
Author: Questionless,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-02 14:17:38