我注意到 IE7 不会对从 javascript 检索到的查询字符串参数进行 url 编码,例如:
var qs = location.search;
在 Firefox 中,参数是经过编码的。如何编写特定于 IE 的代码以与 FireFox 相同的方式对参数进行 URL 编码?
例如,在 Firefox 中,这个查询字符串:
?val=<script>
//gets rewritten as:
?val=%3Cscript%3E
我注意到 IE7 不会对从 javascript 检索到的查询字符串参数进行 url 编码,例如:
var qs = location.search;
在 Firefox 中,参数是经过编码的。如何编写特定于 IE 的代码以与 FireFox 相同的方式对参数进行 URL 编码?
例如,在 Firefox 中,这个查询字符串:
?val=<script>
//gets rewritten as:
?val=%3Cscript%3E
通常,对字符串进行 URL 编码以在 URL 的一部分中使用的正确函数是encodeURIComponent
. 不要使用escape
,这是 JavaScript 独有的一种过时的非标准自定义编码方案。它看起来像 URL 参数编码,但对加号和所有非 ASCII 字符的处理方式不同。将它与标准 URL 解码器放在一起,就会出现错误。
但是,如果它给您提供诸如 or 之类的坏字符(不应出现在 URL 中,但 IE 允许您输入),您不应该调用encodeURIComponent
它,location.search
因为它会对已经正确编码的字符进行双重编码;例如,地址中的实数(如果用户按照格式正确的链接访问您的站点)将被错误转换为.<
>
%3C
%253C
修复“不安全”的 URL 字符,同时保留已编码的字符是该encodeURI
功能的用途;试试看(在所有浏览器上,不需要嗅探)。它很少使用,但可能是您需要的。否则,您将看到一个烦人的 regexp-and-hex-encoding-function 替换。
您可以使用转义功能:
var qs = escape(location.search);