为什么在字符串文字中使用`<script>`会导致JS语法错误?

时间:2015-12-11 22:23:02

标签: javascript escaping string-literals javascript-injection

考虑以下代码:

&#xA;&#xA;

&#xD;& #xA;
&#xD;&#xA;
  var testVar =“&lt; script&gt;警报(\ “一\”)&LT; /脚本&GT; @ emaildomain.con“;  
&#的xD;&#XA;
&#的xD;&#XA;
&#xD;&#xA;

&#xA;&#xA;

在FF控制台上,我收到错误

&#xA;&#xA;
& #xA;

SyntaxError:unterminated string literal。

&#xA;
&#xA;&#xA;

但是,如果将 script 更改为 xscript ,没有错误:

&#xA;&#xA;

&#xD ;&#xA;
&#xD;&#xA;
  var testVar =“&lt; xscript&GT;警报(\ “一\”)&LT; / xscript&GT; @ emaildomain.con“;  
&#的xD;&#XA;
&#的xD;&#XA; < / div>&#xD;&#xA;

&#xA;&#xA;

在JS中转义 script 标记的正确方法是什么,为什么包含它们字符串文字导致此行为?

&#xA;

1 个答案:

答案 0 :(得分:3)

</script>部分实际上关闭了起始标记。

<script type="text/javascript">
     var testVar = "<script>alert(\"a\")</script>@emaildomain.con";
</script>

所以,你的脚本将是:

<script type="text/javascript">
     var testVar = "<script>alert(\"a\")
</script>
@emaildomain.con";</script>

要解决此问题,您可以这样做:

<script type="text/javascript">
     var testVar = "<script>alert(\"a\")</" + "script>@emaildomain.con";
</script>