jQuery ajax + responseText +字符编码

时间:2012-03-23 23:39:55

标签: php jquery ajax character-encoding

我在JavaScript中使用jQuery库对PHP脚本执行AJAX请求 这是执行AJAX请求的命令:

$.ajax({
    async: "false",
    cache: "false",
    data: {login: strLogin, password: strPassword},
    datatype: "text",
    error: connexionAjaxError,
    success: connexionAjaxSuccess,
    type: "POST",
    url: "./Connexion"
});

“。Connexion”是我的PHP脚本的URL重定向 connexionAjaxError是一个收到HTTP响应后不可避免地执行的JavaScript函数 原因是:我的PHP脚本导致文本/普通页面的HTTP状态代码等于500 这是我的PHP脚本中最相关的部分:

header("HTTP/1.0 500 Internal Server Error; 
        Content-type: text/plain; 
        charset=ISO-8859-1");

echo "été";

这是connexionAjaxError回调函数的签名:

function connexionAjaxError(jqXHR, textStatus, errorThrown)

我的PHP结果为字符串“été” 我的PHP内部编码是ISO-8859-1,因此结果字符串以十六进制表示法编码[e9 74 e9]。

但是connexionAjaxError回调函数中的jqXHR.responseText包含一个1个字符的字符串。
我使用了JavaScript String对象的charCodeAt方法来获取字符的unicode(UTF-8?)代码。
该字符以十六进制表示法编码为65535,等效于十六进制表示法中的[ff ff]。

我不明白为什么jqXHR.responseText不包含3个字符的字符串“été”。
我不是JavaScript方面的专家,但我认为jqXHR.responseText只能包含以UTF-8编码的字符串。
因此,jqXHR.responseText中的字符串“été”将以十六进制表示法编码[c3a9 74 c3a9]。
我从以下网站检索了字符“é”的UTF-8代码:http://www.utf8-chartable.de/

2 个答案:

答案 0 :(得分:1)

我用西班牙语进行了很多开发,我注意到了一些可能对你有帮助的事情,因为我已经经历过这个:

标题函数中的字符集应为UTF-8。

此外,FILE本身(PHP脚本)必须以UTF-8保存,如果使用Notepad ++编辑文件并选择编码为UTF-8而不使用BOM,则可以轻松实现此目的。

同样适用于您的javascript和HTML文件,它们都应使用UTF-8进行编码,而不使用BOM而不是ANSI。

让我知道!

答案 1 :(得分:0)

尝试在你的调用中设置这样的Contenttype,据我所知,如果没有指定,jQuery Ajax总是utf-8。

$.ajax({
...
    datatype: "text",
    contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1",
    error: connexionAjaxError,
    success: connexionAjaxSuccess,
    type: "POST",
...
});

编辑: 如果我的回答没有帮助,那么如果您检查服务器字符集配置并发布它可能会有所帮助。