Quali caratteri devono essere salvati nei documenti XML o dove posso trovare un simile elenco?
Quali caratteri devono essere salvati nei documenti XML o dove posso trovare un simile elenco?
Risposte:
Se usi una classe o una biblioteca appropriate, queste faranno la fuga per te. Molti problemi XML sono causati dalla concatenazione di stringhe.
Ce ne sono solo cinque:
" "
' '
< <
> >
& &
I caratteri di escape dipendono da dove viene utilizzato il personaggio speciale.
Gli esempi possono essere convalidati presso il servizio di convalida markup W3C .
Il modo sicuro è di sfuggire a tutti e cinque i caratteri nel testo. Tuttavia, i tre personaggi "
, '
e >
non devono essere sfuggiti nel testo:
<?xml version="1.0"?>
<valid>"'></valid>
Il modo sicuro è sfuggire a tutti e cinque i caratteri negli attributi. Tuttavia, il >
personaggio non deve essere sfuggito agli attributi:
<?xml version="1.0"?>
<valid attribute=">"/>
Non è '
necessario sfuggire al personaggio negli attributi se le virgolette sono "
:
<?xml version="1.0"?>
<valid attribute="'"/>
Allo stesso modo, "
non è necessario sfuggire agli attributi se le virgolette sono '
:
<?xml version="1.0"?>
<valid attribute='"'/>
Tutti e cinque i caratteri speciali non devono essere esclusi nei commenti:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
Tutti e cinque i caratteri speciali non devono essere salvati nelle sezioni CDATA :
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
Tutti e cinque i caratteri speciali non devono essere sottoposti a escape nelle istruzioni di elaborazione XML:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
HTML ha una propria serie di codici di escape che coprono molti più caratteri.
"
verranno cambiate in&quot;
Forse questo aiuterà:
Elenco dei riferimenti alle entità di caratteri XML e HTML :
Nei documenti SGML, HTML e XML, i costrutti logici noti come dati di carattere e valori di attributo sono costituiti da sequenze di caratteri, in cui ogni personaggio può manifestarsi direttamente (rappresentandosi), oppure può essere rappresentato da una serie di caratteri denominati riferimenti a caratteri, di cui esistono due tipi: un riferimento di carattere numerico e un riferimento di entità di carattere. Questo articolo elenca i riferimenti alle entità carattere validi nei documenti HTML e XML.
Quell'articolo elenca le seguenti cinque entità XML predefinite:
quot "
amp &
apos '
lt <
gt >
Secondo le specifiche del World Wide Web Consortium (w3C), ci sono 5 caratteri che non devono apparire nella loro forma letterale in un documento XML , tranne quando usati come delimitatori di markup o all'interno di un commento, un'istruzione di elaborazione o una sezione CDATA . In tutti gli altri casi, questi caratteri devono essere sostituiti utilizzando l'entità corrispondente o il riferimento numerico secondo la seguente tabella:
Original CharacterXML entity replacementXML numeric replacement
< < <
> > >
" " "
& & &
' ' '
Nota che le suddette entità possono essere usate anche in HTML, ad eccezione di & apos; , che è stato introdotto con XHTML 1.0 e non è dichiarato in HTML 4. Per questo motivo e per garantire la retrocompatibilità, la specifica XHTML raccomanda l'uso di & # 39; anziché.
>
deve essere escluso se segue il ]]
contenuto, a meno che non sia destinato a far parte del ]]>
delimitatore che indica la fine di una sezione CDATA.
I caratteri di escape sono diversi per tag e attributi.
Per i tag:
< <
> > (only for compatibility, read below)
& &
Per attributi:
" "
' '
Il carattere e commerciale (&) e la parentesi angolare sinistra (<) non devono apparire nella loro forma letterale, tranne quando utilizzati come delimitatori di markup o all'interno di un commento, un'istruzione di elaborazione o una sezione CDATA. Se sono necessari altrove, devono essere salvati utilizzando rispettivamente i riferimenti ai caratteri numerici o le stringhe "& amp;" e "& lt;". La parentesi ad angolo retto (>) può essere rappresentata usando la stringa "& gt;" e, per compatibilità, deve essere sfuggita usando "& gt;" o un riferimento di carattere quando appare nella stringa "]]>" nel contenuto, quando quella stringa non segna la fine di una sezione CDATA.
Per consentire ai valori di attributo di contenere virgolette singole e doppie, l'apostrofo o il carattere a virgoletta singola (') può essere rappresentato come "& apos;" e il carattere di virgoletta doppia (") come" & quot; ".
Nuova risposta semplificata a una vecchia domanda comune ...
Sempre (importante al 90% da ricordare)
Valori di attributo (9% importante da ricordare)
attr="
'
Le virgolette singole '
vanno bene tra virgolette doppie."
attr='
"
Le virgolette doppie "
vanno bene tra virgolette singole.'
"
come "
e '
come '
altrimenti.Commenti , CDATA e istruzioni di elaborazione (0,9% importante da ricordare)
Esoterica (0,1% importante da ricordare)
]]>
come ]]>
se non ]]>
stia terminando una sezione CDATA. ]]>
deve essere evasa come ]]>
, anche quando non è in una sezione CDATA. Il modo più semplice per raggiungerlo potrebbe essere quello di sfuggire sempre>
a >
.
]]>
ma ho scelto di relegarla in esoterica piuttosto che suggerire che sia >
sempre evaso (cosa che non deve essere, come sai). Il mio obiettivo qui è rendere le regole di escape XML facili da ricordare e accurate al 100% .
AttValue
citata nella mia risposta tramite un link su 2. Valori degli attributi .
Oltre ai cinque caratteri comunemente noti [<,>, &, "e '], vorrei anche sfuggire al carattere di tabulazione verticale (0x0B). È UTF-8 valido, ma non XML 1.0 valido e anche molte librerie (inclusa la libreria altamente portatile (ANSI C) libxml2 ) manca e restituisce silenziosamente XML non valido.
Estratto da: XML, Escaping
Esistono cinque entità predefinite:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
"Tutti i caratteri Unicode consentiti possono essere rappresentati con un riferimento di carattere numerico." Per esempio:
中
La maggior parte dei caratteri di controllo e altri intervalli Unicode sono specificamente esclusi, il che significa (penso) che non possono verificarsi né in escape né in diretti:
Dipende dal contesto. Per il contenuto, è < e & , e ]]> (sebbene una stringa di tre anziché un carattere).
Per i valori degli attributi, è < , & , " e ' .
Per CDATA, è ]]> .
Solo <
e &
devono essere evitati se devono essere trattati i dati dei personaggi e non il markup:
<company>AT&T</company>