如何使用JavaScript在IE7中urlencode location.search params

时间:2010-02-05 18:35:29

标签: javascript internet-explorer internet-explorer-7 urlencode

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

var qs = location.search;

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

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

?val=<script>

//gets rewritten as:

?val=%3Cscript%3E

2 个答案:

答案 0 :(得分:3)

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

但是,如果encodeURIComponent提供location.search<等不良字符(不应出现在网址中,哪个IE允许你输入),因为它会对已经正确编码的字符进行双重编码;例如,地址中的真实>(如果用户已将正确形成的链接指向您的网站)将被误转换为%3C

修复“不安全”的URL字符,同时保留已编码的字符,这是%253C函数的用途;试试(在所有浏览器上,不需要嗅探)。它很少使用,但可能是你需要的。否则,你正在寻找一个恼人的regexp-and-hex-encoding-function替换。

答案 1 :(得分:0)

您可以使用escape功能:

var qs = escape(location.search);