我看到一些网站正在使用JavaScript escape()和unescape()函数互换。
有人用过:
document.write('<img height="1" width="1" style="border-style:none;" alt="" src="..."/>');
然而,这也很常见(注意:他们首先“逃避”字符串,然后“unescape”它):
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'));
后者似乎与前者相同,只是使用更长的方式。这两种方法有什么不同吗?
答案 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这样复杂化。”