代码之家  ›  专栏  ›  技术社区  ›  pinkgothic sudip

在<script>[/<style>]标记之间转义JavaScript[/CSS]:对可能打破现状的洞察

  •  9
  • pinkgothic sudip  · 技术社区  · 14 年前

    因此,大约一周前我感到惊讶的是,<script>标记之间的数据通常不会被转义。事实上。。。不可能。逃离它会带来巨大的灾难 洛夫特·奥诺兹 -据我所知,在地球上的每一个浏览器中,都使用JavaScript解析器。

    这就把我们引向了(IMO)clusterfuck having to use CDATA for documents with in-HTML JavaScript blocks to pass validation (in XHTML) ,这一刻你仍然笑着说 ]]> 在你的代码中的任意原因。

    作为一个编码/逃逸的纯粹主义者,我看到这一点会感到不安。几天来我一直在问自己:

    为什么?

    JS事件处理程序 onclick )从另一个神圣的规则 '为什么?这是一个“历史上这只是一个增长的方式,现在它是拙劣的,处理它”,还是有人坐下来想了一些我没有看到的东西?

    我们是否知道是什么导致了这一现象,或者这是一个知识缺失的案例?我的googlefu在这个话题上表现得非常糟糕,我什么也没发现,但既然这实际上是以可悲的强迫症方式困扰着我,如果有人有任何解释的话,我很乐意听到。

    2 回复  |  直到 14 年前
        1
  •  7
  •   Quentin    14 年前

    因为使用诸如 & <

    另一方面, <script> <style> 不能有子元素,因此没有必要使包含标记变得容易。

    结果-HTML定义 <脚本> <样式> 因为DTD中包含CDATA,所以您不需要在文档中手动执行,从而简化了操作。

    XHTML是不同的。在许多方面,XML比SGML更简单,而且它的DTD(据我所知)没有这种功能。因此,您需要在XHTML中明确CDATA标记(或使用实体)。它是一个“clusterfuck”的唯一原因是人们声称他们的XHTML是HTML,因为它提供了text/HTML内容类型(而不是正确的应用程序/XHTML+xml)。

    至于内在事件属性,SGML不能说特殊字符不应该被这样对待,但是当它们被使用时,它们不应该包含比函数调用更多的内容,而且最好避免使用不引人注目的JS。

        2
  •  2
  •   MooGoo    14 年前

    不断地 使用需要在HTML中转义的字符。这就是CDATA的意义所在,不是吗?

    告诉我你觉得什么更合理

    if (5 &gt; 4 &amp;&amp; 2 &lt; 3) alert('dude');
    

    或者

    if (5 > 4 && 2 < 3) alert('dude');
    

    同样在绝大多数情况下,CSS和Javascript都应该作为单独文件的链接包含,而不是内联在HTML中,这样就完全避免了转义问题。