gpt4 book ai didi

java - 另一个 JQuery 编码问题,在 IE 上

转载 作者:搜寻专家 更新时间:2023-11-01 02:18:41 24 4
gpt4 key购买 nike

我正在为一个意大利网站编写代码,我需要在其中使用 xhr 调用来验证一些输入数据。我的 ajax 请求代码是这样的(我使用的是 JQuery 1.3.2):

 $.ajaxSetup({
type: "POST",
timeout: 10000,
contentType: "application/x-www-form-urlencoded; charset=iso-8859-1"
});


$.ajax({
url: "ajaxvalidate.do",
data: {field:controlInfo.field,value:controlInfo.fieldValue},
dataType: "json",
complete: function() {
//
},
success: function(msg) {
handleAsyncMsg(controlInfo, msg, closureOnError);
},
error: function(xhr, status, e) {
showException(controlInfo.id, status);

}

});

在后端,我有一个 java struts 操作来处理 xhr。我需要在页面中使用编码 ISO-8859-1 以确保在同步提交中正确发送数据(特殊重音字符)。

在 Firefox 中,一切都像魅力一样工作,但是当我必须处理来自 IE 7 的带有重音字符的异步帖子时,我遇到了一个问题:我总是收到无效字符(可能是 utf-8?)。EG 我输入 àààààààà 的形式,我在我的请求中得到这个值:Ã Ã Ã Ã Ã Ã Ã。由于请求字符集已正确设置为 ISO-8859-1,我无法理解为什么服务器仍未正确解析表单值。

这是一个包含所有请求 header 和错误的日志示例(服务器是旧的 Bea Weblogic 8.1):

Encoding: ISO-8859-1
Header: x-requested-with - Value: XMLHttpRequest
Header: Accept-Language - Value: it
Header: Referer - Value: https://10.172.14.36:7002/reg-docroot/conv/starttim.do
Header: Accept - Value: application/json, text/javascript
Header: Content-Type - Value: application/x-www-form-urlencoded; charset=iso-8859-1
Header: UA-CPU - Value: x86
Header: Accept-Encoding - Value: gzip, deflate
Header: User-Agent - Value: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Header: Host - Value: 10.172.14.36:7002
Header: Content-Length - Value: 65
Header: Connection - Value: Keep-Alive
Header: Cache-Control - Value: no-cache
Header: Cookie - Value: JSESSIONID=JQJlNpVC86yTZJbcpt54wzt82TnkYmWYC5VLL2snt5Z8GTsQ1pLQ!1967684811
Attribute: javax.net.ssl.cipher_suite - Value: SSL_RSA_WITH_RC4_128_MD5
Attribute: javax.servlet.request.key-size - Value: 128
Attribute: javax.servlet.request.cipher_suite - Value: TLS_RSA_WITH_RC4_128_MD5
Attribute: javax.servlet.request.key_size - Value: 128
Attribute: weblogic.servlet.network_channel.port - Value: 7001
Attribute: weblogic.servlet.network_channel.sslport - Value: 7002
Attribute: org.apache.struts.action.MESSAGE - Value: org.apache.struts.util.PropertyMessageResources@4a97dbd
Attribute: org.apache.struts.globals.ORIGINAL_URI_KEY - Value: /conv/ajaxvalidate.do
Attribute: errors - Value: org.apache.struts.util.PropertyMessageResources@4a97e4d
Attribute: org.apache.struts.action.MODULE - Value: org.apache.struts.config.impl.ModuleConfigImpl@4aa2ff8
Attribute: weblogic.servlet.request.sslsession - Value: javax.net.ssl.impl.SSLSessionImpl@42157c5
field: nome - value: àààààààà - action: /endtim

最佳答案

contentType: "application/x-www-form-urlencoded; charset=iso-8859-1"

您可以您在标题中将表单提交作为 ISO-8859-1 发送,但这并不意味着您确实如此。 jQuery 使用标准 JavaScript encodeURIComponent() 方法将 Unicode 字符串编码为查询字符串字节,并且始终使用 UTF-8。

无论如何,MIME 类型“application/x-www-form-urlencoded”的“charset”参数是高度不标准的。作为“x-”类型,该类型没有正式的 MIME 注册,但 HTML 4.01 没有指定这样的参数,并且对于“application/*”类型来说是非常不寻常的。 Weblogic 声称可以检测此构造,无论其值(value)如何。

所以你可以做的是:

1: 自己创建 POST 正文形式的 urlencoded 内容,手动将其破解成 ISO-8859-1 格式,使用类似的东西

function encodeLatin1URIComponent(str) {
var bytes= '';
for (var i= 0; i<str.length; i++)
bytes+= str.charCodeAt(i)<256? str.charAt(i) : '?';
return escape(bytes).split('+').join('%2B');
}

而不是 encodeURIComponent()。

2: 丢失‘字符集’并让它照常提交 UTF-8,并让您的 servlet 理解传入的 UTF-8。这通常是最好的,但意味着要修改 servlet 容器配置以使其选择正确的编码。对于 Weblogic,这似乎意味着 using an <input-charset> element在 weblogic.xml 中。到那时,您正在考虑将整个应用程序移动到 UTF-8。这绝不是一件坏事(不支持 Unicode 的网站太过 20 世纪了!)但可能需要做很多工作。

关于java - 另一个 JQuery 编码问题,在 IE 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/657871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com