1

我注意到 IE7 不会对从 javascript 检索到的查询字符串参数进行 url 编码,例如:

var qs = location.search;

在 Firefox 中,参数是经过编码的。如何编写特定于 IE 的代码以与 FireFox 相同的方式对参数进行 URL 编码?

例如,在 Firefox 中,这个查询字符串:

?val=<script>

//gets rewritten as:

?val=%3Cscript%3E
4

2 回答 2

3

通常,对字符串进行 URL 编码以在 URL 的一部分中使用的正确函数是encodeURIComponent. 不要使用escape,这是 JavaScript 独有的一种过时的非标准自定义编码方案。它看起来像 URL 参数编码,但对加号和所有非 ASCII 字符的处理方式不同。将它与标准 URL 解码器放在一起,就会出现错误。

但是,如果它给您提供诸如 or 之类的坏字符(不应出现在 URL 中,但 IE 允许您输入),您不应该调用encodeURIComponent它,location.search因为它会对已经正确编码的字符进行双重编码;例如,地址中的实数(如果用户按照格式正确的链接访问您的站点)将被错误转换为.<>%3C%253C

修复“不安全”的 URL 字符,同时保留已编码的字符是该encodeURI功能的用途;试试看(在所有浏览器上,不需要嗅探)。它很少使用,但可能是您需要的。否则,您将看到一个烦人的 regexp-and-hex-encoding-function 替换。

于 2010-02-05T18:48:43.203 回答
0

您可以使用转义功能:

var qs = escape(location.search);
于 2010-02-05T18:38:10.697 回答