“%3Cscript”vs“

时间:2012-12-07 21:26:51

标签: javascript special-characters

每隔一段时间,我会看到一段HTML代码段:

%3Cscript

%3C取代<。这是因为代码是自动生成的还是需要在编辑器中正确显示,还是由于某种原因以明确的方式进行编码,需要将该表单保留在HTML网页上?如果它有用,这里是我质疑的代码行的完整开头:

document.write(unescape('('%3Cscript

使用%3C替换<时代码行不会很好吗?

3 个答案:

答案 0 :(得分:3)

unescape() Javascript函数会在将%3C写入文档之前将<转换回<script。这显然是为了避免触发可能在源代码中看到文字{{1}}标记的扫描程序并误解其含义。

答案 1 :(得分:1)

在嵌入在html中的脚本标记中编写javascript时,序列</script>不能出现在脚本中的任何位置,因为它将结束脚本标记:

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

或多或少被视为:

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

在html解析器的眼中。

就像mplungjan所说的那样,这是一种令人费解的方式,只需{j}字符串文字<\/script>即可使其工作:

<script type="text/javascript">
    var a = "<script>alert('hello world');<\/script>";
</script>

这在技术上与document.write无关,只是document.write是javascript字符串文字中需要"</script>"的常见位置。

另请注意"<script>"确实完全没问题。这只是"</script>",这是你从代码中删除的问题。

答案 2 :(得分:0)

如上所述,可能会欺骗扫描仪。

更有用,更重要的是 当document.writing脚本内联时,<\/script>'...<scr'+'ipt>'不需要结束当前脚本块