JQuery AJAX没有向我的服务器发送UTF-8,只在IE中发送

我发送UTF-8,日文文本到我的服务器。 它适用于Firefox。 我的access.log和标题是:

/ajax/?q=%E6%BC%A2%E5%AD%97 Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Content-Type application/x-www-form-urlencoded; charset=UTF-8 

但是,在IE8中,我的access.log说:

 /ajax/?q=?? 

出于某种原因,IE8正在将我的AJAX调用变成问号。 为什么!? 我根据一些教程添加了scriptCharset和ContentType,但仍然没有运气。

这是我的代码:

 $.ajax({ method:"get", url:"/ajax/", scriptCharset: "utf-8" , contentType: "application/x-www-form-urlencoded; charset=UTF-8", data:"q="+query ..., ... }) 

尝试使用encodeURIComponent()编码查询参数

 data:"q="+encodeURIComponent( query ) 

由于bobince在他的评论中非常正确地指出,如果你使用对象表示法将参数传递给ajax方法,它将处理编码本身..

所以

 data:{ q : query } 

将使jQuery处理编码..

我读过这篇文章,希望它能解决我遇到的问题,这与utf8转换有关。

在我的情况下,事实certificate服务器引擎(node.js)计算数据的内容长度,数据被认为是原始而不是utf8,因此uft8中的两个字符扩展字符被计算为好像它们产生一个字符在服务器发送一个字符太少。

看看我在这里解决了什么: 发送到CouchDB时没有很好地形成Json

我知道这是一个老post,但我最近遇到了这个问题,我想做出贡献,万一其他人有同样的问题。 我正在使用PHP,但我确信每种服务器端语言都有一个选项。 这只是几件事:

  1. 确保通过添加标题(’Content-Type:text / html; charset = utf-8’)在ajax响应上发送正确的标题; 这一定是你的第一线。 如果你有任何错误说已经发送了标题或类似的东西是因为代码中的某个地方你在发送标题之前输出了额外的空格或其他东西,所以请检查你的代码。

  2. 在服务器中构建响应时,请确保使用echo htmlentities将所有字符转换为对应的HTML字符($ your-string,null,’utf-8); 因为即使在告诉IE你发送utf-8数据之后,似乎IE忘记了它,或者它不会简单地假设任何东西,所以将它添加到你的代码将确保正确的输出。

感谢你的帮助。

在javaScript中使用encodeURIComponent() 。 这是样本:

 function doPost() { var URL = "http://localhost/check.php?yab=" + encodeURIComponent(document.getElementById("formSearch").childNodes[1].value); xmlHttp.open("GET", URL); xmlHttp.send(); };