¿Debo usar <! [CDATA […]]> en HTML5?

80

Estoy bastante seguro de que las <![CDATA[...]]>secciones se pueden usar en XHTML5, pero ¿qué pasa con HTML5?

Darryl Hein
fuente

Respuestas:

56

La CDATAestructura no es realmente para HTML, es para XML.

La gente a veces los usa en HTML dentro de las scriptetiquetas porque elimina la necesidad de escapar de ciertos caracteres especiales. Sin embargo, de ninguna manera es un requisito (para HTML 4 o 5).

Editar: Aquí es donde abrimos esa vieja lata de gusanos realmente mohosa de 2002 sobre si estás enviando XHTML como text/htmlo como application/xhtml+xml"se supone" que debes :-)

hollsk
fuente
1
Estoy enviando HTML (no XHTML) y quiero eso. Gracias por la respuesta :)
Darryl Hein
¿Se puede usar CDATAdentro de una preetiqueta para no tener que arreglar todos mis soportes angulares?
gman
1
Inexacto. CDATA es para SGML y el subconjunto XML. Por tanto, es para HTML y XHTML.
Johan Boulé
24

Desde la misma página @pst vinculada a :

Análisis de elementos específicos para etiquetas scriptystyle , Orientación para la compatibilidad con XHTML-HTML : "El siguiente código con escape puede garantizar que los elementos de estilo y script funcionen tanto en XHTML como en HTML, incluidos los navegadores más antiguos".

Máxima compatibilidad con versiones anteriores:

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

Versión más simple, algo incompatible con "navegadores mucho más antiguos":

<script>//<![CDATA[
   ...
//]]></script>

Por lo tanto, CDATAse puede usar en HTML5 y se recomienda en la Guía para la compatibilidad con XHTML-HTML . Esto es útil para páginas HTML / XML / XHTML políglotas , que se crean y analizan como XML durante el desarrollo, pero sirven como HTML5 para una mejor compatibilidad entre navegadores. Las páginas políglotas tienen sus beneficios , y yo mismo he usado esto, ya que es mucho más fácil depurar XML / XHTML5. Google Chrome, por ejemplo, arrojará un error para XML / XHTML5 no válido (incluido, por ejemplo , el escape de caracteres ), mientras que la misma página servida como HTML5 "simplemente funcionará" o "probablemente funcionará".

Joel Purra
fuente
12
los comentarios dentro de una etiqueta de secuencia de comandos son necesarios si desea admitir algunos navegadores de 20 años, es decir, NSCA Mosaic o Netscape 1 ...
Antti Haapala
15

La especificación parece aclarar este problema. Las etiquetas de estilo y script se consideran "elementos de texto sin formato". CDATA no es necesario ni permitido para ellos. CDATA solo se utiliza con "contenido extranjero", es decir, MathML y ​​SVG. Tenga en cuenta que existen algunas restricciones sobre lo que puede ir en la etiqueta del script; básicamente, no puede poner algo como var x = '</script>'allí porque cerrará la etiqueta y debe dividirse como pst se indica en su respuesta. http://www.w3.org/TR/html5/syntax.html#cdata-rcdata-restrictions

rmarscher
fuente
5

Quizás vea: http://wiki.whatwg.org/wiki/HTML_vs._XHTML

<! [CDATA [...]]> es un comentario falso.

En HTML, <script>ya está protegido, por eso a veces debe escribirse como a = "<" + "/script>", para evitar confundir al navegador. Tenga en cuenta que el código es válido fuera de un CDATA en HTML.


fuente
2
Creo que la mejor forma de escapar de la etiqueta final es "<\ / script>". Leí que algunos analizadores solo verifican "</", no "</script>"
marcus
@marcus Tienes razón y ese </es el único token especial en este contexto. Mis respuestas más recientes sobre el tema coinciden ya que he actualizado mis conocimientos con el tiempo ;-) Actualizaré esto. Dicho esto, parece común tener la división </scr+ ipt>, y no sé de un navegador convencional donde no funcione ...