IE不是url编码的单引号/撇号


当参数包含单引号/撇号时,我在IE11上使用jQuery进行AJAX调用时遇到问题。

基于jQuery文档https://api.jquery.com/jquery.getjson/

发送到服务器的数据作为查询附加到URL一串如果数据参数的值是普通对象,则为转换为字符串并编码url,然后将其附加到URL。

它应该对任何特殊字符进行编码,但显然对IE11没有这样做。

AJAX调用看起来像:

$.getJSON(
"https://fqdn.to.server:8888/pdqm/endpoint",
{
firstName: self.firstName(),
lastName: self.lastName()
},
function (data) { 
//here is some stuff to do with UI
}

当使用is搜索示例Va$$ar O’Connor时,它将创建请求URL作为

https://fqdn.to.server:8888/pdqm/endpoint?firstName=Va%24%24ar&lastName=O'Connor

当在Chrome/Firefox中时,它看起来像

https://fqdn.to.server:8888/pdqm/endpoint?firstName=Va%24%24ar&lastName=O%27Connor

其是正确编码的URL。

有什么技巧可以在IE上使用吗?或者另一方面,单引号/撇号是否是查询字符串中的有效字符,并且无论如何都必须由端点处理?

如果这是唯一的字符给你带来麻烦,你可以想出一个变通办法来检查用户是否在IE上,然后使用JavaScriptreplace()函数替换它:

var firstName, lastName;
if (window.navigator.userAgent.indexOf("MSIE") > 0) {
// they are using I.E.
firstName = self.firstName().replace(/'/g, "%27");
lastName = self.lastName().replace(/'/g, "%27");
}
else {
// every other browser, just set them normally
firstName = self.firstName();
lastName = self.lastName();
}
$.getJSON(
"https://fqdn.to.server:8888/pdqm/endpoint",
{
firstName: firstName,
lastName: lastName
},
function (data) { 
//here is some stuff to do with UI
}
);

最新更新