我应该在HTML5中使用<![CDATA […]]>吗?


Answers:


56

CDATA结构根本就不是针对HTML,而是针对XML。

人们有时会在HTMLscript标记内使用它们,因为它消除了它们转义某些特殊字符的需要。但这绝不是必需的(对于HTML 4或5)。

编辑:在这里,我们打开从2002年起真正发霉的旧蠕虫病毒罐,讨论是否将XHTMLtext/htmlapplication/xhtml+xml类似地发送到:-)


1
我正在发送HTML(不是XHTML),我想要那个。答案:)
达里尔·海因

可以CDATApre标签内使用,这样我就不必修理所有的尖括号了吗?
gman

1
不精确 CDATA用于SGML和XML子集。因此适用于HTML和XHTML。
约翰·博莱

24

在同一页面,@ pst链接到

单元特定的分析scriptstyle标签指导XHTML,HTML兼容性:“下面的代码与逃逸可以保证脚本和样式元素将在这两个XHTML和HTML工作,包括旧的浏览器”

最大的向后兼容性:

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

比较简单的版本,与“更旧的浏览器”不兼容:

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

因此,CDATA可以在HTML5中使用,并且在XHTML-HTML兼容性指南中推荐使用。这对于多语言HTML / XML / XHTML页面很有用,这些页面在开发过程中被创建并解析为XML,但作为HTML5可以更好地跨浏览器兼容。Polyglot页面有其优点,我自己使用了它,因为调试XML / XHTML5容易得多。例如,谷歌浏览器将针对无效的XML / XHTML5(包括例如字符转义)抛出错误,而用作HTML5的同一页面将“正常工作”,也称为“可能正常工作”。


12
如果你想支持一些20岁的浏览器的脚本标记中的注释都需要,这是NSCA马赛克或Netscape 1 ...
安蒂·哈帕拉

15

规范似乎可以解决此问题。脚本和样式标签被视为“原始文本元素”。不需要或不允许使用CDATA。CDATA仅与“外部内容”一起使用-即MathML和SVG。请注意,脚本标记中可以包含一些限制-基本上您不能var x = '</script>'在其中放置类似内容,因为它会关闭标记,并且需要像答案中指出的pst一样进行拆分。http://www.w3.org/TR/html5/syntax.html#cdata-rcdata-restrictions


5

也许看到:http : //wiki.whatwg.org/wiki/HTML_vs._XHTML

<![CDATA [...]]>是伪造的注释。

在HTML中,<script>它已经受到保护-这就是为什么有时必须将其编写为a = "<" + "/script>",以避免混淆浏览器的原因。请注意,该代码在HTML中的CDATA外部有效。


2
我认为逃避结束标记的最佳方法是“ <\ / script>”。我读过一些解析器仅检查“ </”,而不检查“ </ script>”
marcus 2012年

@marcus您是正确的,并且</在这种情况下,这是唯一的特殊标记。我对这个问题的较新答案是一致的,因为随着时间的推移我已经更新了我的知识;-)我将对此进行更新。话虽这么说,</scr+ipt>分割似乎很常见,而且我不知道主流浏览器无法正常工作……
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.