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.<?PITargetW 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 .
AttValuektó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>