数组中的字符串“</script>”被解释,是否有解决方法

The string "</script>" in an array is interpreted, is there a workaround?

本文关键字:解释 是否 方法 解决 script 字符串 数组      更新时间:2023-09-26

This :

<script type="text/javascript">
var a = new Array("</script>");
alert(a);
</script>

。没有按预期工作(至少是我(。字符串"</script>"被解释为脚本的结尾,即使它用引号引起来。请看这些 jsfiddles :

http://jsfiddle.net/RYbTS/

http://jsfiddle.net/PB73z/

第一个以正常方式声明数组的第一个元素,而第二个以紧凑形式声明它。在这两种情况下,浏览器(Chrome,FF,IE(都会在"</script>"停止脚本,并且永远不会收到警报。

无论是使用引号还是双引号,它的行为方式都相同。

是意料之中的吗?有解决方法吗?

编辑:谢谢大家,我会逃脱反斜杠。对不起,我不能接受大家的回答,我接受了第一个,但谢谢大家。

Juhana 提供的链接解释了这种行为:

在将元素中的文本节点传递给 JS 引擎之前,所有 HTML 都会被解析,</script>不会因为位于 JS 字符串文本中而得到特殊处理

您可以转义/字符:

<script type="text/javascript">
var a = new Array("<'/script>");
alert(a);
</script>

这是一个更新的小提琴。

转义序列:

var a = new Array("<'/script>");

或拆分它:

var a = new Array("</scr" + "ipt>");

这就是 json 编码转义/的原因。通常没有必要逃避它,但这是(我认为(您遇到问题的唯一情况。当然,转义序列</script>会更准确,但这似乎有点出乎意料。

用法如下:

<script type="text/javascript">
var a = new Array("<'/script'>");
alert('ok');
</script>

在这里摆弄:

http://jsfiddle.net/GUc2x/