[英]JavaScript: escape vs. unescape
我看到一些站点互换使用了JavaScript escape()和unescape()函数。
一些使用:
document.write('<img height="1" width="1" style="border-style:none;" alt="" src="..."/>');
然而,这也很常见(请注意:他们先“转义”字符串,然后“转义”字符串):
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'));
后者似乎与前者达到了相同的目的,只是使用了更长的时间。 这两种方法有什么区别?
在此示例中尚不清楚。 但是您不能在字符串中包含包含<script>
或</script>
内联脚本,否则浏览器将尝试像脚本标签一样对其进行处理。
对HTML进行转义和转义可以避免此问题。 更好的解决方案是将脚本与html文档放在单独的文件中。
换行符和与JavaScript相似的引号会破坏解析器。
var test = "This "string", for example.";
反斜杠转义是内置的,因此可以使用:
var test = "This \"string\", for example.";
但是随后您必须找到一个函数来转义“,”,\\ n,\\ r,以及其他答案<和>。
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的复杂度降低了。”
为了符合xhtml,您不能在脚本块中包含任何HTML标记( <div></div>
或<img />
),因此您可以使用unescape或串联'<' + 'div...'
或添加//<![CDATA[ ... //]]>
脚本块内的//<![CDATA[ ... //]]>
通过验证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.