Php 为什么jQuery在UTF-16中发布?
我的博客软件的博客帖子创建页面使用jQuery通过AJAX发布内容。奇怪的是,当我提交汉字时(中文) 通过jQuery,它以UTF-16的形式发送到服务器。当我禁用jQuery AJAX并使用Firefox发布它时,它会以UTF-8的形式发送,就像它应该的那样 在检查Firebug时,jQuery发送以下消息:Php 为什么jQuery在UTF-16中发布?,php,jquery,ajax,utf-8,Php,Jquery,Ajax,Utf 8,我的博客软件的博客帖子创建页面使用jQuery通过AJAX发布内容。奇怪的是,当我提交汉字时(中文) 通过jQuery,它以UTF-16的形式发送到服务器。当我禁用jQuery AJAX并使用Firefox发布它时,它会以UTF-8的形式发送,就像它应该的那样 在检查Firebug时,jQuery发送以下消息:%u4E2D%u6587,这显然是URL编码的UTF-16。 Firefox发送此消息:%E4%B8%AD%E6%96%87,这肯定是URL编码的UTF-8 jQuery声称根据W3规范使
%u4E2D%u6587
,这显然是URL编码的UTF-16。
Firefox发送此消息:%E4%B8%AD%E6%96%87
,这肯定是URL编码的UTF-8
jQuery声称根据W3规范使用UTF-8发布,那么为什么要使用UTF-16呢
有问题的jQuery代码:
$('#create').submit(function() {
var inputs = [];
$('.cf', this).each(function() {
inputs.push(this.name + '=' + escape(this.value));
})
jQuery.ajax({
data: inputs.join('&'),
type: "POST",
url: this.getAttribute('action'),
contentType: "application/x-www-form-urlencoded;charset=UTF-8",
timeout: 2000,
success: function(json) {
var r = jQuery.parseJSON(json);
alert(r.result);
}
})
return false;
})
如果有人需要,相关的PHP代码位于该文件的第一个
if
条件中:尝试将内容类型设置为UTF-8
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
UTF-16是从
转义(this.value)
返回的,它与jQuery无关
尝试运行escape(“中文")代码>在控制台中
您应该使用encodeURIComponent()
,它似乎会生成您期望的字符串(“%E4%B8%AD%E6%96%87”)
或
让jQuery通过以散列而不是字符串的形式传递数据来完成所有编码部分
…或
与其手动创建数据,不如尝试使用$(“.cf”).serialize()
或$(“.cf”).serializeArray()
获取POST字符串/数据数组。我相信这取决于页面本身定义的字符集(通过标题:
或看起来您发现了jQuery的一个bug。请在他们的bugtracker中报告。我感觉到与您的浏览器不兼容。否则,我会说如果请求是json编码的,这仍然是正确的(不是jQuery文档,而是json/javascript规范)。发生在IE9、Firefox 13和Chrome 19以及jQuery 1.7.2中。请求是正确的,而不是UTF-16编码。谢谢,我会报告它。我已经这样做了。没有帮助。我还尝试通过PHP的header()设置它.你说得对。我有一个朋友帮了我的忙,大约一个小时前我们得出了完全相同的结论。不过,谢谢你的回答!