Javascript jQueryAjax并没有将UTF-8发送到我的服务器,只是在IE中
我正在向我的服务器发送UTF-8日语文本。 它在Firefox中工作。My access.log和头文件为:Javascript jQueryAjax并没有将UTF-8发送到我的服务器,只是在IE中,javascript,jquery,ajax,utf-8,internet-explorer-8,Javascript,Jquery,Ajax,Utf 8,Internet Explorer 8,我正在向我的服务器发送UTF-8日语文本。 它在Firefox中工作。My 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
/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()
正如bobince在他的评论中非常正确地指出的那样,如果使用对象表示法将参数传递给ajax方法,它将处理编码本身
所以
将使jQuery处理编码。我知道这是一篇老文章,但我最近遇到了这个问题,我想为其他人提供帮助,以防其他人也有同样的问题。 我使用的是PHP,但我确信每种服务器端语言都有一个选项。这只是几件事:
谢谢大家的帮助。我读了这篇文章,希望它能解决我遇到的与utf8转换有关的问题 在我的例子中,结果是服务器引擎(node.js)使用被认为是原始的而不是utf8的数据来计算数据的内容长度,因此uft8中的两个字符扩展字符被计算出来,就好像其中一个字符导致服务器发送的字符太少一样
看看我在这里做了什么来解决它:在javaScript中使用
encodeURIComponent()
。以下是示例:
function doPost()
{
var URL = "http://localhost/check.php?yab=" + encodeURIComponent(document.getElementById("formSearch").childNodes[1].value);
xmlHttp.open("GET", URL);
xmlHttp.send();
};
发起调用的页面是否也进行了utf-8编码(定义了正确的字符集)?是的,有元标记:。另外,accept字符集在表单中。页面是否以UTF-8格式保存?前几天出现了一个类似问题,在文件中指定UTF-8字符集,但文件保存为ANSI。此外,您能否确认100%没有服务器发送的
内容类型
标头与meta标记相矛盾?这可能会以不同的方式混淆浏览器。+1这是我的第一个想法,但我认为jQuery处理了编码。现在,如果数据已经设置为查询字符串,jQuery就不会处理编码,这是有道理的。哼@安迪,我一开始也有同样的想法,但后来注意到了实际的代码:)是的,这是一个很好的理由,可以将像{q:query}
这样的映射传递到ajax()
,让jQuery为您担心编码问题。@bobince,+1,非常正确,我将把它添加到答案中以供将来参考。奇怪的是,只有encodeURIComponent(query)适用于俄语
data:{ q : query }
function doPost()
{
var URL = "http://localhost/check.php?yab=" + encodeURIComponent(document.getElementById("formSearch").childNodes[1].value);
xmlHttp.open("GET", URL);
xmlHttp.send();
};