JavaScript:逃避与unescape

时间:2011-02-03 21:33:50

标签: javascript

我看到一些网站正在使用JavaScript escape()和unescape()函数互换。

有人用过:

document.write('<img height="1" width="1" style="border-style:none;" alt="" src="..."/>');

然而,这也很常见(注意:他们首先“逃避”字符串,然后“unes​​cape”它):

document.write(unescape('%3Cimg%20height%3D%221%22%20width%3D%221%22%20style%3D%22border-style%3Anone%3B%22%20alt%3D%22%22%20src%3D%22...%22/%3E'));

后者似乎与前者相同,只是使用更长的方式。这两种方法有什么不同吗?

3 个答案:

答案 0 :(得分:1)

在这个例子中并不清楚。但是,您不能在字符串中包含<script></script>的内联脚本,或者浏览器会尝试像脚本标记一样处理它。

转义和转义html避免了这个问题。更好的解决方案是将脚本放在与html文档不同的文件中。

答案 1 :(得分:0)

对于xhtml合规性,您不能在脚本块中包含任何HTML标记(<div></div><img />),因此要么使用unescape或连接'<' + 'div...',要么在其中添加//<![CDATA[ ... //]]>用于传递验证的脚本块。

答案 2 :(得分:0)

JavaScript的换行符和类似引号会破坏解析器。

var test = "This "string", for example.";

反斜杠转义是内置的,因此可行:

var test = "This \"string\", for example.";

但是你必须找到一个函数来逃避“,',\ n,\ r,以及其他答案,&lt;和&gt;以及。

escape()已经编码了字符串以删除大多数非字母数字字符,而unescape()撤消了escape()。

escape("It's > 20% less complicated this way.")

“这%-27%20%3E%2020%25%20less%20complicated%20this%20way。”

如果逃脱的空间打扰你,请尝试:

escape("It's > 20% less complicated this way.").replace(/%20/g, " ")

“它%27s%3E 20%25这样复杂化。”