2011-08-17 13 views

risposta

104

Tutto il testo in un documento XML verrà analizzato dal parser.

Ma il testo all'interno di una sezione CDATA verrà ignorato dal parser.

CDATA - (non analizzate) Character dati

Il termine CDATA viene utilizzata per i dati di testo che non deve essere analizzato dal parser XML.

Caratteri come "<" e "&" non sono consentiti negli elementi XML.

"<" genererà un errore perché il parser lo interpreta come l'inizio di un nuovo elemento.

"&" genererà un errore perché il parser lo interpreta come l'inizio di un'entità carattere.

Alcuni testi, come il codice JavaScript, contengono molti caratteri "<" o "&". Per evitare errori, il codice di script può essere definito come CDATA.

Tutto il contenuto di una sezione CDATA viene ignorato dal parser.

sezione

Un CDATA inizia con "<![CDATA[" e termina con "]]>"

uso di CDATA nell'output programma

sezioni CDATA nei documenti XHTML sono suscettibili di essere letti in modo diverso da browser Web se eseguono il rendering del documento come HTML, poiché i parser HTML non riconoscono i marcatori di inizio e fine CDATA, né riconoscono i riferimenti di entità HTML come &lt; all'interno dei tag <script>.Ciò può causare problemi di rendering nei browser Web e può portare a vulnerabilità di scripting cross-site se utilizzato per visualizzare dati da fonti non attendibili, poiché i due tipi di parser non saranno d'accordo su dove finisce la sezione CDATA.

A brief SGML tutorial.

Vedere anche Wikipedia entry on CDATA.

+6

Penso di avere una domanda migliore allora. A grandi linee, quali vantaggi si associano all'uso del tag CDATA? – ajameswolf

73

CDATA non ha alcun significato in HTML.

CDATA è un costrutto XML che imposta il contenuto di un tag che è normalmente #PCDATA - dati di carattere analizzati, da prendere invece come #CDATA, cioè dati di caratteri non analizzati. È pertinente e valido solo in XHTML.

Viene utilizzato nei tag script per evitare l'analisi < e &. In HTML, questo non è necessario, perché in HTML, script è già #CDATA.

+9

così, y fa la gente lo usa all'interno Javascript tag? dove ha qualche significato e per cosa, grazie – SexyMF

+0

@SexyMF Probabilmente perché queste persone digitano i documenti XHTML invece di SGML/HTML e/o vogliono aiutare meno browser conformi agli standard a caricare correttamente le loro pagine indipendentemente. – amn

+0

Anche se ha quasi 6 anni, questa è ancora la migliore spiegazione di 'CDATA' che ho visto. – freginold

4

CDATA è una sequenza di caratteri del set di caratteri del documento e può includere entità di carattere. I programmi utente dovrebbero interpretare i valori degli attributi come segue: Sostituire entità carattere con i caratteri,

Ignora avanzamenti di riga,

Sostituire ogni ritorno a capo o una scheda con un singolo spazio.

15

Da http://en.wikipedia.org/wiki/CDATA:

Dal momento che è utile essere in grado di utilizzare meno-che segni (<) e commerciali (&) negli script di pagine web, e in misura minore gli stili misura, senza dover per ricordarsi di sfuggirle, è normale usare i marcatori CDATA attorno al testo di inline e gli elementi nei documenti XHTML . Ma in modo che il documento può anche essere analizzato da HTML parser, che non riconoscono i marcatori CDATA, i marcatori CDATA di solito sono commentate-out, come in questo esempio JavaScript:

<script type="text/javascript"> 
//<![CDATA[ 
document.write("<"); 
//]]> 
</script> 
6

CDATA è Obsoleto.

Quindi non ne fanno uso in HTML 5.

https://developer.mozilla.org/en-US/docs/Web/API/CDATASection

+2

Sono confuso su cosa sta cambiando. 1) I dati dei caratteri esistono ancora in DOM4? https://www.w3.org/TR/dom/#interface-characterdata 2) Eppure il CDATASection viene rimosso? https://www.w3.org/TR/dom/#dom-core Quale sarà l'alternativa? Codifica obbligatoria o tutti '<' e '&' e inseriti in qualche altro tag? Che ne dici di sostenere i vecchi documenti? I browser improvvisamente elimineranno il supporto CDATA? Quindi non possiamo elaborare documenti creati da altri sui quali non abbiamo alcun controllo? O semplicemente ricorrere al manipolare manualmente le stringhe? – user314159

+0

Basta sfuggire ai caratteri speciali. –

+0

Per la creazione di XML, capisco, è sufficiente sfuggire ai caratteri. Tuttavia, la mia preoccupazione è come elaborare le sezioni CDATA (ad esempio dai feed che non possiamo controllare e potrebbe essere lento ad aggiornare il loro formato), dopo che i browser hanno rimosso CDATASection dal DOM? Quando cadranno? FF 49 continua a mostrarmi CDATASection nel DOM. Non è chiaro per me come gestire in questo caso durante il tempo di transizione dopo che è stato reso obsoleto e rimosso dal browser. Sarà visto come un nodo di testo? Un errore (tag errato)? Sto solo cercando di evitare la bruttezza di trovare manualmente i marcatori nel testo per estrarre i dati all'interno. – user314159

5

Un modo per scrivere un sottoinsieme comune di HTML e XHTML, nella speranza di una maggiore portabilità.

In HTML, <script> è la magia che sfugge a tutto finché non viene visualizzato </script>.

Così si può scrivere:

<script>x = '<br/>'; 

e <br/> non sarà considerato un tag.

Questo è il motivo per cui le stringhe come ad esempio:

x = '</scripts>' 

devono essere sfuggito come:

x = '</scr' + 'pts>' 

See: Why split the <script> tag when writing it with document.write()?

Ma XML (e quindi XHTML, che è un "sottoinsieme" di XML, unlike HTML), non ha quella magia: <br/> sarebbe visto come un tag.

<![CDATA[ è il modo XHTML per dire:

non analizzano nessun tag fino al prossimo ]]>, considerare tutto una stringa

Il // viene aggiunto per rendere bene il lavoro CDATA anche in HTML.

In HTML <![CDATA[ non è magico, quindi sarebbe gestito da JavaScript. Quindi // è usato per commentare.

L'XHTML vede anche l'//, ma osserverà come una riga di commento vuoto che non è un problema:

// 

che diceva:

  • browser conformi dovrebbero riconoscere se il documento è HTML di XHTML dal doctype iniziale <!DOCTYPE html> vs <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  • I siti Web compatibili possono fare affidamento su browser conformi e coordinare doctype con un singolo valido script sintassi

Ma che viola la regola d'oro di Internet:

non si fidano di terzi, o il vostro prodotto si romperà