如何在IE7中使用JavaScript对location.search参数进行URL编码

如何在IE7中使用JavaScript对location.search参数进行URL编码,javascript,internet-explorer,internet-explorer-7,urlencode,Javascript,Internet Explorer,Internet Explorer 7,Urlencode,我注意到IE7没有对从javascript检索到的querystring参数进行url编码,例如: var qs = location.search; 在Firefox中,参数是经过编码的。我如何编写IE特定代码,以与FireFox相同的方式对参数进行URL编码 例如,在Firefox中,此查询字符串: ?val=<script> //gets rewritten as: ?val=%3Cscript%3E ?val= //被重写为: ?val=%3c脚本%3E 您可以使用以

我注意到IE7没有对从javascript检索到的querystring参数进行url编码,例如:

var qs = location.search;
在Firefox中,参数是经过编码的。我如何编写IE特定代码,以与FireFox相同的方式对参数进行URL编码

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

?val=<script>

//gets rewritten as:

?val=%3Cscript%3E
?val=
//被重写为:
?val=%3c脚本%3E
您可以使用以下功能:

var qs = escape(location.search);

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

但是,您不应该在
位置上调用
encodeURIComponent
。如果它给您提供了像
(不应该出现在URL中,但IE允许您输入)这样的坏字符,则搜索
,因为它将对已经正确编码的字符进行双重编码;例如,地址中的一个真实的
%3C
(如果用户按照正确格式的链接访问了您的站点)将被错误地转换为
%253C


encodeURI
函数的作用是修复“不安全”的URL字符,同时保留已编码的字符;试试看(在所有浏览器上,不需要嗅探)。它很少使用,但可能是你需要的。否则,您将看到一个恼人的regexp和十六进制编码函数替换。

不要使用
escape
,它不支持UTF-8编码。改用
encodeURIComponent
。@Andy:谢谢分享,我不知道:)