繁体   English   中英

JavaScript:转义与转义

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM