Jakie znaki muszą być escape'owane w dokumentach XML, lub gdzie mógłbym znaleźć taką listę?
Jeśli użyjesz odpowiedniej klasy lub biblioteki, wykonają one ucieczkę za Ciebie. Wiele problemów z XML jest spowodowanych przez konkatenację łańcuchów.
Jest ich tylko pięć:
" "
' '
< <
> >
& &
Unikanie znaków zależy od tego, gdzie znak specjalny jest używany.
Przykłady mogą być zweryfikowane na stronie W3C Markup Validation Service.
Bezpiecznym sposobem jest ucieczka wszystkich pięciu znaków w tekście, jednakże, trzy znaki "
, '
i >
nie muszą być ucieczką w tekście:
<?xml version="1.0"?>
<valid>"'></valid>
Bezpiecznym sposobem jest ucieczka wszystkich pięciu znaków w atrybutach, jednakże znak >
nie musi być ucieczką w atrybutach:
<?xml version="1.0"?>
<valid attribute=">"/>
Znak '
nie musi być escape'owany w atrybutach, jeśli cudzysłów jest "
:
<?xml version="1.0"?>
<valid attribute="'"/>
Podobnie, znak "
nie musi być escape'owany w atrybutach, jeśli cudzysłów jest '
:
<?xml version="1.0"?>
<valid attribute='"'/>
Wszystkie 5 znaków specjalnych nie mogą być escape'owane w komentarzach:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
Wszystkie 5 znaków specjalnych nie mogą być escape'owane w sekcjach CDATA:
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
Wszystkie 5 znaków specjalnych nie mogą być escape'owane w instrukcjach przetwarzania XML:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
HTML ma swój własny zestaw kodów ucieczki, który obejmuje o wiele więcej znaków.
Może to pomoże:
Lista referencji encji znaków XML i HTML:
W dokumentach SGML, HTML i XML stosuje się m.in. Konstrukcje logiczne znane jako znaki dane i wartości atrybutów składają się z sekwencje znaków, w których każdy znak może przejawiać się bezpośrednio (reprezentując siebie), lub może być reprezentowany przez serię znaków zwaną referencją znaku, której istnieją dwa rodzaje: numeryczna odniesienie do znaku i znak odniesienie do encji. W tym artykule wymieniono referencje encji znaków, które są poprawne w dokumentach HTML i XML.
W tym artykule wymieniono pięć następujących predefiniowanych encji XML:
quot "
amp &
apos '
lt <
gt >
oprócz powszechnie znanych pięciu znaków [<, >, &, ", '], uciekłbym również od znaku pionowej tabulacji (0x0B). Jest to prawidłowy UTF-8, ale nie prawidłowy XML 1.0, a nawet wiele bibliotek (włączając libxml2) pomija go i po cichu wypisuje nieprawidłowy XML.