Jakie znaki muszą być poprzedzone znakami ucieczki w dokumentach XML lub gdzie mogę znaleźć taką listę?
Jakie znaki muszą być poprzedzone znakami ucieczki w dokumentach XML lub gdzie mogę znaleźć taką listę?
Odpowiedzi:
Jeśli użyjesz odpowiedniej klasy lub biblioteki, zrobią ci ucieczkę. Wiele problemów XML jest spowodowanych konkatenacją ciągów.
Jest tylko pięć:
" "
' '
< <
> >
& &
Uciekające postacie zależą od tego, gdzie jest używany znak specjalny.
Przykłady można sprawdzić w usłudze weryfikacji znaczników W3C .
Bezpiecznym sposobem jest ucieczka wszystkich pięciu znaków w tekście. Jednak trzy znaki "
, '
i >
nie musi być uciekł w tekście:
<?xml version="1.0"?>
<valid>"'></valid>
Bezpiecznym sposobem jest ucieczka wszystkich pięciu znaków w atrybutach. Nie >
trzeba jednak uciekać postaci w atrybutach:
<?xml version="1.0"?>
<valid attribute=">"/>
'
Postać nie musi być uciekł w atrybutach jeśli cytaty są "
:
<?xml version="1.0"?>
<valid attribute="'"/>
Podobnie "
nie ma potrzeby zmiany znaczenia w atrybutach, jeśli cytaty to '
:
<?xml version="1.0"?>
<valid attribute='"'/>
Wszystkich pięciu znaków specjalnych nie można dodawać w komentarzach:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
Wszystkie pięć znaków specjalnych nie może być znakami ucieczki w sekcjach CDATA :
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
Wszystkie pięć znaków specjalnych nie może być znakami ucieczki w instrukcjach przetwarzania XML:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
HTML ma własny zestaw kodów ucieczki, które obejmują znacznie więcej znaków.
"
zostaną zmienione na&quot;
Być może pomoże to:
Lista odniesień do encji znakowych XML i HTML :
W dokumentach SGML, HTML i XML logiczne konstrukcje znane jako dane znakowe i wartości atrybutów składają się z sekwencji znaków, w których każdy znak może się zamanifestować bezpośrednio (reprezentując siebie) lub może być reprezentowany przez szereg znaków zwany odwołaniem do znaku, z których istnieją dwa typy: odwołanie do znaku numerycznego i odwołanie do znaku. W tym artykule wymieniono odwołania do encji znakowych, które są poprawne w dokumentach HTML i XML.
W tym artykule wymieniono pięć następujących predefiniowanych jednostek XML:
quot "
amp &
apos '
lt <
gt >
Zgodnie ze specyfikacjami konsorcjum World Wide Web (w3C) istnieje 5 znaków, które nie mogą występować w postaci dosłownej w dokumencie XML , z wyjątkiem przypadków, gdy są używane jako ograniczniki znaczników lub w komentarzu, instrukcji przetwarzania lub sekcji CDATA . We wszystkich pozostałych przypadkach znaki te muszą zostać zastąpione przy użyciu odpowiedniego elementu lub odwołania numerycznego zgodnie z następującą tabelą:
Original CharacterXML entity replacementXML numeric replacement
< < <
> > >
" " "
& & &
' ' '
Zauważ, że wyżej wspomniane jednostki mogą być używane również w HTML, z wyjątkiem & apos; , który został wprowadzony w XHTML 1.0 i nie jest zadeklarowany w HTML 4. Z tego powodu oraz w celu zapewnienia kompatybilności wstecznej specyfikacja XHTML zaleca użycie & # 39; zamiast.
>
musi być poprzedzone znakiem ucieczki, jeśli występuje ]]
w treści, chyba że ma być częścią ]]>
separatora wskazującego koniec sekcji CDATA.
Znaki ucieczki są różne dla tagów i atrybutów.
W przypadku tagów:
< <
> > (only for compatibility, read below)
& &
W przypadku atrybutów:
" "
' '
Z danych postaci i znaczników :
Znak ampersand (&) i lewy nawias kątowy (<) nie mogą występować w postaci dosłownej, z wyjątkiem przypadków, gdy są używane jako ograniczniki znaczników lub w komentarzu, instrukcji przetwarzania lub sekcji CDATA. Jeśli są potrzebne gdzie indziej, należy je uciec za pomocą odwołań do znaków numerycznych lub odpowiednio ciągów „& amp;” i „& lt;”. Nawias prostokątny (>) może być reprezentowany za pomocą ciągu „& gt;” i musi być, w celu zachowania kompatybilności, wybierany za pomocą „& gt;” lub odwołania do znaku, gdy pojawia się w ciągu „]]>„ w treści, gdy ten ciąg nie oznacza końca sekcji CDATA.
Aby wartości atrybutów mogły zawierać zarówno pojedyncze, jak i podwójne cudzysłowy, apostrof lub znak pojedynczego cudzysłowu (') mogą być reprezentowane jako „& apos;”, a znak podwójnego cudzysłowu („) jako„ & quot; „.
Nowa, uproszczona odpowiedź na stare, często zadawane pytanie ...
Zawsze (90% ważne do zapamiętania)
Wartości atrybutów (9% ważne do zapamiętania)
attr="
'
Pojedyncze cudzysłowy '
są prawidłowe w obrębie podwójnych"
attr='
"
Podwójne cudzysłowy "
są w porządku w pojedynczych cudzysłowach.'
"
jak "
i '
jako '
inaczej.Komentarze , CDATA i instrukcje przetwarzania (0,9% ważne do zapamiętania)
<!--
W komentarzach -->
nie trzeba uciekać, ale --
łańcuchy nie są dozwolone.<![CDATA[
W ramach CDATA ]]>
nie trzeba nic uciekać, ale nie]]>
łańcuchy są dozwolone.<?PITarget
W PI ?>
nie trzeba uciekać, ale ?>
łańcuchy nie są dozwolone.Esoterica (0,1% ważne do zapamiętania)
]]>
jak ]]>
chyba ]]>
kończy sekcji CDATA. ]]>
należy unikać ]]>
, nawet jeśli nie ma jej w sekcji CDATA. Najprostszym sposobem osiągnięcia, które mogą być na zawsze uciec >
jak >
.
]]>
ale zdecydowałem się przenieść ją do ezoteryki, zamiast sugerować, że >
zawsze należy jej unikać (co nie musi, jak wiadomo). Moim celem jest, aby reguły ucieczki XML były łatwe do zapamiętania i w 100% dokładne .
AttValue
które zacytowałem w mojej odpowiedzi poprzez link 2. Wartości atrybutu .
Poza powszechnie znanymi pięcioma znakami [<,>, &, "i '], unikałbym także znaku tabulacji pionowej (0x0B). Jest to poprawny UTF-8, ale nie jest poprawny XML 1.0, a nawet wiele bibliotek (w tym bardzo przenośna (ANSI C) biblioteka libxml2 ) tęsknię i cicho wyprowadza niepoprawny XML.
Skrócony z: XML, Escaping
Istnieje pięć predefiniowanych jednostek:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
„Wszystkie dozwolone znaki Unicode mogą być reprezentowane za pomocą znaków numerycznych.” Na przykład:
中
Większość znaków kontrolnych i innych zakresów Unicode jest wyraźnie wykluczonych, co oznacza (myślę), że nie mogą wystąpić ani w postaci znaku ucieczki, ani bezpośredniego:
To zależy od kontekstu. W przypadku treści jest to < i & oraz ]]> (choć ciąg trzech znaków zamiast jednego znaku).
W przypadku wartości atrybutów jest to < , & , „ i ” .
W przypadku CDATA jest to ]]> .
Tylko <
i &
należy je uciec, jeśli mają być traktowane dane znaków, a nie znaczniki:
<company>AT&T</company>