2011-08-17 54 views
146

¿Cuál es el uso de CDATA dentro de etiquetas JavaScript y HTML?¿Qué es CDATA en HTML?

<script type="text/javascript"> 
// <![CDATA[ 

// ]]> 
</script> 

Respuesta

104

El analizador analizará todo el texto en un documento XML.

Pero el texto dentro de una sección CDATA será ignorado por el analizador.

CDATA - (no analizada) Carácter de datos

El término se utiliza CDATA sobre los datos de texto que no debe ser analizado por el analizador XML.

Caracteres como "<" y "&" son ilegales en elementos XML.

"<" generará un error porque el analizador lo interpreta como el inicio de un elemento nuevo.

"&" generará un error porque el analizador lo interpreta como el inicio de una entidad de caracteres.

Algunos textos, como el código JavaScript, contienen muchos caracteres "<" o "&". Para evitar errores, el código de script se puede definir como CDATA.

Todo el contenido de una sección CDATA es ignorado por el analizador.

sección

Un CDATA comienza con "<![CDATA[" y termina con "]]>"

El uso de CDATA en la salida del programa

secciones CDATA en documentos XHTML son susceptibles de ser analizado sintácticamente diferente por navegadores web si representan el documento como HTML, ya que los analizadores HTML no reconocen los marcadores de inicio y fin de CDATA, ni reconocen las referencias de entidades HTML como &lt; dentro de las etiquetas <script>.Esto puede causar problemas de renderizado en los navegadores web y puede generar vulnerabilidades de scripts entre sitios si se utilizan para mostrar datos de fuentes que no son de confianza, ya que los dos tipos de analizadores estarán en desacuerdo sobre dónde termina la sección CDATA.

A brief SGML tutorial.

También, vea el Wikipedia entry on CDATA.

+6

Creo que tengo una mejor pregunta entonces. A grandes rasgos, ¿qué beneficios están asociados con el uso de la etiqueta CDATA? – ajameswolf

73

CDATA no tiene ningún significado en HTML.

CDATA es una construcción XML que establece los contenidos de una etiqueta que normalmente es #PCDATA - datos de caracteres analizados, que se tomarán como #CDATA, es decir, datos de caracteres no analizados. Solo es relevante y válido en XHTML.

Se utiliza en script etiquetas para evitar que sea interpretado < y &. En HTML, esto no es necesario, porque en HTML, script ya es #CDATA.

+9

así, y qué personas lo utilizan en Javascript etiquetas? dónde tiene algún significado y para qué, gracias – SexyMF

+0

@SexyMF Probablemente porque estas personas escriben documentos XHTML en lugar de SGML/HTML, y/o quieren ayudar a los navegadores menos compatibles con los estándares a cargar correctamente sus páginas independientemente. – amn

+0

A pesar de que tiene casi 6 años, esta sigue siendo la mejor explicación de 'CDATA' que he visto. – freginold

4

CDATA es una secuencia de caracteres del conjunto de caracteres del documento y puede incluir entidades de caracteres. Los agentes de usuario deberían interpretar los valores de los atributos de la siguiente manera: Reemplazar entidades de caracteres con caracteres,

Ignorar saltos de línea,

Reemplazar cada retorno de carro o pestaña con un solo espacio.

15

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

Dado que es útil ser capaz de utilizar menos que los signos (<) y símbolos de unión (&) en guiones de la página web, y a un estilos, en menor medida, sin tener para recordar escaparse de ellos, es común utilizar los marcadores CDATA alrededor del texto de en línea y los elementos en documentos XHTML. Pero para que el documento también se puede analizar por HTML analizadores, que no reconocen los marcadores CDATA, los marcadores CDATA por lo general se comentan de salida, como en este ejemplo de JavaScript:

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

CDATA es Obsoleto.

así que no use en HTML 5.

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

+2

Estoy confundido acerca de lo que está cambiando. 1) ¿Todavía existen datos de caracteres en DOM4? https://www.w3.org/TR/dom/#interface-characterdata 2) Sin embargo, ¿se está eliminando la CDATASection? https://www.w3.org/TR/dom/#dom-core ¿Cuál será la alternativa? ¿Codificación obligatoria o todos '<' y '&' y colocados en alguna otra etiqueta? ¿Qué hay de apoyar documentos antiguos? ¿Los navegadores repentinamente dejarán de admitir CDATA? ¿Entonces no podemos procesar documentos creados por otros sobre los cuales no tenemos control? ¿O simplemente recurrir al violín de cuerda manual? – user314159

+0

Solo escapa de los personajes especiales. –

+0

Para la creación de XML, entiendo, simplemente escape los caracteres. Sin embargo, mi preocupación es cómo procesar las secciones de CDATA (por ejemplo, de feeds que no podemos controlar y puede ser lento para actualizar su formato), después de que los navegadores eliminen CDATASection del DOM? ¿Cuándo caerán? FF 49 todavía me muestra CDATASection en el DOM. No me queda claro cómo manejarlo en este caso durante el tiempo de transición después de que se haya obsoleto y eliminado del navegador. ¿Será visto como un nodo de texto? Un error (etiqueta incorrecta)? Solo trato de evitar la fealdad de encontrar marcadores manualmente en el texto para extraer los datos internos. – user314159

5

Una manera de escribir un subconjunto común de HTML y XHTML, con la esperanza de una mayor portabilidad.

En HTML, <script> es magia, se escapa todo hasta que aparece </script>.

para que pueda escribir:

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

y <br/> no se considerará una etiqueta.

Esta es la razón por cadenas como:

x = '</scripts>' 

deben escaparse como:

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

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

Pero XML (y por lo tanto XHTML, que es un "subconjunto" de XML, unlike HTML), no tiene esa magia: <br/> se vería como una etiqueta.

<![CDATA[ es la forma Valid decir:

no analizar las etiquetas hasta la próxima ]]>, considere todo una cadena

El // se añade para hacer bien el trabajo CDATA en HTML también.

En HTML <![CDATA[ no es mágico, por lo que sería ejecutado por JavaScript. Entonces // se usa para comentarlo.

El XHTML también ve la //, pero se observa como una línea de comentario vacío, lo cual no es un problema:

// 

que decía:

  • navegadores compatibles deberían reconocer si el documento es HTML de XHTML desde el doctype inicial <!DOCTYPE html> frente a <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  • los sitios web compatibles pueden confiar en los navegadores compatibles y coordinar el doctype con un único y válido script sintaxis

Pero eso viola la regla de oro de la Internet:

no confían en terceros, o su producto se romperá