我注意到IE7没有对从javascript检索到的查询字符串参数进行url编码,例如:
var qs = location.search;
在Firefox中,参数已编码。如何编写特定于IE的代码以与FireFox相同的方式对参数进行URL编码?
例如,在Firefox中,这个查询字符串:
?val=<script>
//gets rewritten as:
?val=%3Cscript%3E
答案 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);