html中有多层引号嵌套,就会导致字符串被截取等问题
引号嵌套两层时,可以使用转义或者单双引号交替的形式实现,当引号嵌套达到三四层的时候,问题就出现了。
比如下面这段是嵌套三层时的正确写法(双引号嵌套单引号,单引号又嵌套转译单引号):
<html>
<head>
<script>
function execScript(code){
var script = document.createElement("script");
script.type = "text/javascript";
try {
/*适用于除IE浏览器以外的浏览器。不适用IE是因为IE把<script>当成特殊元素,不允许操作其子节点*/
script.appendChild(document.createTextNode(code));
} catch (ex){
/*适用IE浏览器*/
script.text = code;
}
document.body.appendChild(script);
}
</script>
</head>
<body>
<input type="button" value="执行javascript代码" οnclick="execScript(alert('I \'m Chinese'))">
</body>
正确的做法有:
- 上面的正确写法是双引号嵌套单引号,单引号又嵌套转译单引号;
- 还有正确做法是单引号嵌套双引号,双引号又嵌套转译双引号。
错误的做法有:
- 双引号嵌套单引号,单引号又嵌套转译双引号。解析时会在第一个转译双引号处中断。比如上面的例子按钮onclick事件改成οnclick="execScript(alert('I \"m Chinese'))",就会出现错误,会被截取为"execScript(alert('I \" ;
- 单引号嵌套双引号,双引号又嵌套转译单引号。解析时会在第一个转译单引号处中断。
三层适用转译一不小心就会出现错误,那如果有更多层更复杂的嵌套怎么解决呢?
解决的方法是使用 " 代替引号。比如上面的例子改成:οnclick="execScript(alert("I'm Chinese"))"