【问题标题】:What is CDATA in HTML? [duplicate]HTML 中的 CDATA 是什么? [复制]
【发布时间】:2011-10-28 20:46:51
【问题描述】:

CDATA 在 JavaScript 标记和 HTML 中的用途是什么?

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

// ]]>
</script> 

【问题讨论】:

    标签: javascript html xhtml cdata


    【解决方案1】:

    XML 文档中的所有文本都将被解析器解析。

    但是解析器会忽略 CDATA 部分中的文本。

    CDATA -(未解析的)字符数据

    术语 CDATA 用于表示不应由 XML 解析器解析的文本数据。

    像“

    "

    "&" 将产生错误,因为解析器将其解释为字符实体的开始。

    有些文本,比如 JavaScript 代码,包含很多“

    解析器会忽略 CDATA 部分中的所有内容。

    CDATA 部分以“&lt;![CDATA[”开头并以“]]&gt;”结尾

    在程序输出中使用 CDATA

    如果 Web 浏览器将文档呈现为 HTML,则 XHTML 文档中的 CDATA 部分可能会被不同地解析,因为 HTML 解析器不识别 CDATA 开始和结束标记,也不识别 HTML 实体引用,例如 &amp;lt;&lt;script&gt; 标签内。如果用于显示来自不受信任来源的数据,这可能会导致 Web 浏览器出现渲染问题,并且可能导致跨站点脚本漏洞,因为这两种解析器在 CDATA 部分的结束位置上存在分歧。

    A brief SGML tutorial.

    另外,请参阅Wikipedia entry on CDATA

    【讨论】:

    【解决方案2】:

    CDATA 在 HTML 中完全没有意义。

    CDATA 是一个 XML 结构,它设置标记的内容,通常是 #PCDATA - 已解析的字符数据,改为 #CDATA,即未解析的字符数据。它仅在 XHTML 中相关且有效。

    script标签中使用,避免解析&lt;&amp;。在 HTML 中,这不是必需的,因为在 HTML 中,script 已经是#CDATA。

    【讨论】:

    • 那么,人们会在 Javascript 标签中使用它吗?它有什么意义,有什么用,谢谢
    • @SexyMF 可能是因为这些人键入 XHTML 文档而不是 SGML/HTML,和/或他们希望帮助不符合标准的浏览器正确加载他们的页面。
    • 虽然已经快6年了,但这仍然是我见过的对CDATA最好的解释。
    • 它在HTML中确实有意义,取决于您是否遇到问题
    【解决方案3】:

    来自http://en.wikipedia.org/wiki/CDATA

    因为能够使用小于号 (

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

    【讨论】:

    • 伙计……当我开始学习 JavaScript 时,我经常看到这个……真的让我回味无穷。
    【解决方案4】:

    CDATA 已过时

    请注意,CDATA 部分不应在 HTML 中使用;它们只适用于 XML。

    所以不要在 HTML 5 中使用它。

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

    【讨论】:

    • 我对正在发生的变化感到困惑。 1) 字符数据仍然存在于 DOM4 中? w3.org/TR/dom/#interface-characterdata 2) 但是 CDATASection 正在被删除? w3.org/TR/dom/#dom-core 有什么替代方案?强制编码还是全部&lt;&amp; 并放在其他标签中?支持旧文件怎么样?浏览器会突然放​​弃对 CDATA 的支持吗?所以我们不能处理其他人创建的我们无法控制的文档?或者只是求助于手动字符串摆弄?
    • 只是转义特殊字符。
    • 对于 XML 的创建,我理解,只是转义字符。但是,我关心的是在浏览器从 DOM 中删除 CDATASection 之后如何处理 CDATA 部分(例如,来自我们无法控制的提要,并且更新它们的格式可能很慢)?他们什么时候会下降? FF 49 仍在向我展示 DOM 中的 CDATASection。我不清楚在这种情况下如何在它被过时并从浏览器中删除后的过渡时间内处理。只会被视为文本节点吗?错误(坏标签)?只是尽量避免在文本中手动查找标记以提取内部数据的丑陋。
    • CDATA 本身并没有被弃用。 XHTML 基于 XML,所以它必须支持 CDATA。 (在 HTML 中,CDATA 标记没有意义;它只会被解析为虚假注释。)不推荐使用的是 CDATASection 接口;如果一个页面被解析为 XHTML,它的内容将作为一个普通的文本节点出现在 DOM 中。
    • 很抱歉 XHTML 已经过时了!但如果你想要 HTML/XML,你可以使用 XHTML5。仅供参考:en.wikipedia.org/wiki/HTML5#XHTML5_(XML-serialized_HTML5)
    【解决方案5】:

    一种编写 HTML 和 XHTML 通用子集的方法

    希望更大的便携性。

    在 HTML 中,&lt;script&gt; 是一种魔法,它会在&lt;/script&gt; 出现之前转义所有内容。

    所以你可以写:

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

    &lt;br/&gt; 不会被视为标签。

    这就是为什么这样的字符串:

    x = '</scripts>'
    

    必须像这样转义:

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

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

    但是 XML(因此 XHTML,它是 XML 的“子集”unlike HTML)没有这种魔力:&lt;br/&gt; 将被视为标签。

    &lt;![CDATA[ 是 XHTML 的表达方式:

    在下一个 ]]&gt; 之前不要解析任何标签,将其视为字符串

    添加// 是为了使 CDATA 在 HTML 中也能正常工作。

    在 HTML 中,&lt;![CDATA[ 并不神奇,所以它可以由 JavaScript 运行。所以//用来注释掉。

    XHTML 也可以看到//,但会将其视为空注释行,这不是问题:

    //
    

    也就是说:

    • 兼容的浏览器应该从初始文档类型&lt;!DOCTYPE html&gt;&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"&gt; 识别文档是HTML 还是XHTML
    • 兼容的网站可以依赖兼容的浏览器,并使用单一有效的script 语法来协调文档类型

    但这违反了互联网的黄金法则:

    不要相信第三方,否则你的产品会坏掉

    【讨论】:

      【解决方案6】:

      CDATA 是文档字符集中的字符序列,可能包括字符实体。用户代理应该如下解释属性值: 用字符替换字符实体,

      忽略换行,

      将每个回车符或制表符替换为一个空格。

      【讨论】:

        猜你喜欢
        • 2011-05-28
        • 2014-04-07
        • 1970-01-01
        • 2011-02-16
        • 2011-10-18
        • 1970-01-01
        • 2014-03-21
        • 1970-01-01
        相关资源
        最近更新 更多