Welke tekens heb ik nodig om te escapen in XML-documenten?

Welke tekens moeten worden geëscaped in XML-documenten, of waar kan ik zo’n lijst vinden?


Antwoord 1, autoriteit 100%

Als je een geschikte klas of bibliotheek gebruikt, zullen zij het escapen voor je doen. Veel XML-problemen worden veroorzaakt door aaneenschakeling van tekenreeksen.

XML-escapetekens

Er zijn er maar vijf:

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

Escape-tekens zijn afhankelijk van waar het speciale teken wordt gebruikt.

De voorbeelden kunnen worden gevalideerd bij de W3C Markup Validation Service.

Tekst

De veilige manier is om alle vijf tekens in tekst te escapen. De drie tekens ", ' en > hoeven echter niet te worden geëscaped in tekst:

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

Kenmerken

De veilige manier is om alle vijf tekens in attributen te escapen. Het teken > hoeft echter niet te worden voorzien van een escapeteken in attributen:

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

Het teken ' hoeft niet te worden geëscaped in attributen als de aanhalingstekens " zijn:

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

Evenzo hoeft de " niet te worden geëscaped in attributen als de aanhalingstekens ' zijn:

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

Opmerkingen

Alle vijf speciale tekens mogen niet worden escaped in opmerkingen:

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

CDATA

Alle vijf speciale tekens mogen niet worden geëscaped in CDATA-secties :

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

Verwerkingsinstructies

Alle vijf speciale tekens mogen niet worden geëscaped in XML-verwerkingsinstructies:

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

XML versus HTML

HTML heeft zijn eigen set escape-codes die veel meer karakters beslaan.


Antwoord 2, autoriteit 7%

Misschien helpt dit:

Lijst met entiteitsreferenties voor XML- en HTML-tekens:

In SGML-, HTML- en XML-documenten wordt de
logische constructies bekend als karakter
gegevens- en attribuutwaarden bestaan ​​uit:
reeksen karakters, waarin elk
karakter kan zich direct manifesteren
(die zichzelf voorstelt), of kan zijn
vertegenwoordigd door een reeks karakters
een karakterreferentie genoemd, waarvan
er zijn twee soorten: een numeriek
tekenreferentie en een teken
entiteit referentie. Dit artikel bevat:
de karakterentiteit verwijst naar dat
zijn geldig in HTML- en XML-documenten.

Dat artikel vermeldt de volgende vijf vooraf gedefinieerde XML-entiteiten:

quot  "
amp   &
apos  '
lt    <
gt    >

Antwoord 3, autoriteit 5%

Volgens de specificaties van het World Wide Web Consortium (w3C), daar zijn 5 tekens die niet in hun letterlijke vorm in een XML-document mogen voorkomen, behalve wanneer ze worden gebruikt als opmaakscheidingstekens of in een opmerking, een verwerkingsinstructie of een CDATA-sectie. In alle andere gevallen moeten deze tekens worden vervangen door de overeenkomstige entiteit of de numerieke verwijzing volgens de volgende tabel:

Oorspronkelijk tekenVervanging van XML-entiteitVervanging van XML-nummer< /kbd>
<                     ;       &lt;                   &sp;nbsp;            &#60;          &#60;                          &sp;nbsp;    
>                       ;       &gt;                   &sp;nbsp;           &#62;      &sp;nbsp;                    &sp;    
"                             &quot;           ;                             #34> ;                     ;          
&                      ;       &amp;                   &sp;nbsp;       &#38;                                                       >
'                                &apos;                   &sp;        &#39;                                                       >

Merk op dat de bovengenoemde entiteiten ook in HTML kunnen worden gebruikt, met uitzondering van &apos;, dat is geïntroduceerd met XHTML 1.0 en niet is gedeclareerd in HTML 4. Om deze reden, en om retro-compatibiliteit te garanderen, beveelt de XHTML-specificatie het gebruik aan van &# 39; in plaats daarvan.


Antwoord 4, autoriteit 4%

Escape-tekens zijn anders voor tags en attributen.

Voor tags:

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

Voor kenmerken:

" &quot;
' &apos;

Van Tekengegevens en markeringen:

Het ampersand-teken (&) en de linker punthaak (<) mogen niet
verschijnen in hun letterlijke vorm, behalve wanneer ze worden gebruikt als scheidingstekens voor markeringen,
of in een opmerking, een verwerkingsinstructie of een CDATA-sectie. Indien
ze zijn ergens anders nodig, ze moeten worden ontsnapt met een van beide numerieke
tekenverwijzingen of de tekenreeksen " &amp; " en " &lt; "
respectievelijk. Het rechte haakje (>) kan worden weergegeven met de
string " &gt; ", en moet, voor compatibiliteit, worden geëscaped met een van beide
" &gt; " of een tekenverwijzing wanneer deze voorkomt in de tekenreeks " ]]>
" in inhoud, wanneer die string niet het einde van een CDATA markeert
sectie.

Om toe te staan ​​dat attribuutwaarden zowel enkele als dubbele aanhalingstekens bevatten,
de apostrof of het enkele aanhalingsteken (') kan worden weergegeven als "
&apos; ", en het dubbele aanhalingsteken (") als " &quot; ".


Antwoord 5, autoriteit 4%

Nieuw, vereenvoudigd antwoord op een oude, veelgestelde vraag...

Vereenvoudigde XML-escaping (prioriteit, 100% voltooid)

  1. Altijd (90% belangrijk om te onthouden)

    • Ontsnap < als &lt; tenzij < een <tag/> of andere markeringen.
    • Ontsnap & als &amp; tenzij & een &entity;.
  2. Kenmerkwaarden (9% belangrijk om te onthouden)

    • attr=" 'Enkele aanhalingstekens' zijn oké tussen dubbele aanhalingstekens."
    • attr=' "Dubbele aanhalingstekens" zijn oké tussen enkele aanhalingstekens.'
    • Ontsnap " als &quot; en ' als &apos; anders.
  3. Opmerkingen, CDATA en Instructies voor verwerking (0,9% belangrijk om te onthouden)< /sup>

    • <!-- Binnen opmerkingen --> er hoeft niets te worden escaped, maar -- strings zijn niet toegestaan.
    • <![CDATA[ Binnen CDATA ]]> er hoeft niets te worden escaped, maar ]]> strings zijn niet toegestaan.
    • <?PITarget Binnen PI's ?> er hoeft niets te worden escaped, maar ?>-tekenreeksen zijn niet toegestaan.
  4. Esoterica (0,1% belangrijk om te onthouden)

    • Escape ]]> als ]]&gt; tenzij ]]> een CDATA-sectie beëindigt.
      (Deze regel is van toepassing op tekengegevens in het algemeen zelfs buiten een CDATA-sectie.)

Antwoord 6, autoriteit 2%

Naast de algemeen bekende vijf tekens [<, >, &, ", en '], zou ik ook het verticale tabteken (0x0B) escapen. Het is geldige UTF-8, maar geen geldige XML 1.0, en zelfs veel bibliotheken (inclusief de zeer draagbare (ANSI C) bibliotheek libxml2) missen het en stilletjes ongeldige XML uit te voeren.


Antwoord 7

Verkort van: XML, Escaping

Er zijn vijf vooraf gedefinieerde entiteiten:

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

"Alle toegestane Unicode-tekens kunnen worden weergegeven met een numerieke tekenreferentie." Bijvoorbeeld:

&#20013;

De meeste controletekens en andere Unicode-reeksen zijn specifiek uitgesloten, wat betekent (denk ik) dat ze niet kunnen voorkomen, noch escaped, noch direct:

Geldige tekens in XML


Antwoord 8

Het hangt af van de context. Voor de inhoud is het < en &, en ]]> (hoewel een reeks van drie in plaats van één teken).

Voor kenmerkwaarden zijn dit <, &, " en '.

Voor CDATA is dit ]]>.


Antwoord 9

Het geaccepteerde antwoord is niet correct. Het beste is om een ​​bibliotheek te gebruiken om aan XML te ontsnappen.

Zoals vermeld in deze andere vraag

"In principe zijn de controletekens en tekens uit de Unicode-reeksen niet toegestaan. Dit betekent ook dat het aanroepen van bijvoorbeeld de tekeneenheid verboden is."

Als u alleen de vijf tekens escapet. U kunt problemen hebben zoals Er is een ongeldig XML-teken (Unicode: 0xc) gevonden


Antwoord 10

Alleen < en & hoeven te worden geëscaped als ze moeten worden behandeld met tekengegevens en niet als markeringen:

2.4 Karaktergegevens en markeringen

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes