我究竟要在`script`元素中逃脱什么?

时间:2011-08-02 07:56:45

标签: javascript html escaping

我必须在HTML页面的script元素内转义哪些JavaScript代码部分? <>&是足够还是太多?

[编辑] 这与此错误相关:http://code.google.com/p/rendersnake/issues/detail?id=15#c6评论#6

3 个答案:

答案 0 :(得分:14)

在HTML(以及XHTML,如果您是evil person将您的XHTML网页发送为text/html),script标记为#CDATA,因此,唯一的事情是你不应该在内容中</script>,因为这就是解析器寻找信号结束标记的全部内容。不要逃避任何事情;只需确保标记内容中没有</script>。例如,如果您有一个带有结束脚本标记的字符串,请将其拆分:

var a = '</scr' + 'ipt>';

在XHTML中,以application/xhtml+xml发送,script代码为#PCDATA,因此,必须转义<&,除非您可以使用<![CDATA[ ... ]]>阻止更改为#CDATA解析模式,但在这种情况下,请记住您的标记内容中不能包含]]>

答案 1 :(得分:0)

通常,我唯一逃脱的是结束标记中的/。因此:

var msg = "<p>Do you <em>really<\/em> think so, Miss Worthington?<\/p>";

对于其他人,我依靠评论整个事情:

<script>
<!--
var msg = "<p>Do you <em>really<\/em> think so, Miss Worthington?<\/p>";
-->
</script>

评论负责HTML开放标记。

答案 2 :(得分:-2)

Escaped&lt;,&gt;和&amp;不适用于许多浏览器。如果你把所有东西都放在CDATA部分里就足够了。请注意,CDATA部分本身必须是JavaScript注释,以便与所有浏览器一起使用。

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