[英]jQuery ajax + responseText + 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”是URL重定向到我的PHP脚本。
connexionAjaxError是一个JavaScript函数,一旦收到HTTP响应,将不可避免地执行该函数。
原因:我的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/
我用西班牙语进行了大量开发,并且注意到一些对您有所帮助的事情,因为我已经完成了以下工作:
标头函数中的字符集应为UTF-8。
另外,FILE本身(PHP脚本)必须保存在UTF-8中,如果使用Notepad ++编辑文件并选择编码为无BOM的UTF-8,则可以轻松实现。
您的javascript和HTML文件也是如此,它们都应使用UTF-8进行编码,而不使用BOM而不是ANSI。
让我知道!
据我所知,请尝试在呼叫中设置Contenttype,据我所知,如果未指定jQuery Ajax始终为utf-8。
$.ajax({
...
datatype: "text",
contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1",
error: connexionAjaxError,
success: connexionAjaxSuccess,
type: "POST",
...
});
编辑:如果我的回答没有帮助,那么如果您检查服务器字符集配置并发布它可能会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.