Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQueryAjax并没有将UTF-8发送到我的服务器,只是在IE中_Javascript_Jquery_Ajax_Utf 8_Internet Explorer 8 - Fatal编程技术网

Javascript jQueryAjax并没有将UTF-8发送到我的服务器,只是在IE中

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

我正在向我的服务器发送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调用变成了问号。为什么?我根据一些教程添加了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,但我确信每种服务器端语言都有一个选项。这只是几件事:

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

  • 在服务器中构建响应时,请确保使用echo htmlentities($your string,null,'utf-8)将所有字符转换为相应的HTML字符;因为即使在告诉IE您正在发送utf-8数据之后,IE似乎忘记了这一点,或者它并没有简单地假设任何事情,因此将此添加到您的代码将确保正确的输出


  • 谢谢大家的帮助。

    我读了这篇文章,希望它能解决我遇到的与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();
    };