【发布时间】:2011-03-29 17:18:16
【问题描述】:
我看到每个人都这样做,但我不明白为什么。
document.write('<script src="src"><\/script>');
我的意思是使用单个 ' 你不需要转义字符?
【问题讨论】:
-
只有 PHP 有这个愚蠢的“单引号字符串不能转义”规则
-
@thief:PHP 的规则非常好
标签: javascript
我看到每个人都这样做,但我不明白为什么。
document.write('<script src="src"><\/script>');
我的意思是使用单个 ' 你不需要转义字符?
【问题讨论】:
标签: javascript
</script> 被解析为结束标记。"</script> 和 "<\/script>" 与 JavaScript 相同,但只有第一个被 HTML 解析器解释为包含 HTML 结束标记.
【讨论】:
HTML 解析器会将您的字符串中的</script> 视为结束标记并关闭您的初始<script>。它没有字符串的概念。
因此,如果您不对其进行转义,您的 JavaScript 将仅被视为 document.write('<script src="src">,其余部分,'); 将被视为 HTML 文本节点。
另外,请注意,您不必以特定方式“转义”</script>。只要你写的不像</script>,什么都可以。一些有效的例子:
document.write('<script src="src"><\/script>');
document.write('<script src="src"></scr' + 'ipt>');
document.write('<script src="src"></' + 'script>');
【讨论】:
</script> 总是结束一个脚本块——不管你做什么(例如 HTML cmets 或 CDATA)。所以它决不能出现在脚本块中,除非你真的想结束这个块,最简单的方法是转义正斜杠(转义不做任何事情;在 JavaScript 中,未知的转义序列只是“丢失”它们的反斜杠)。
【讨论】:
</script> 和 <\/script> 不是相同的值吗?他们不应该产生相同的“错误”