我的博客软件LightBlog的博客文章创建页面使用 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 规范以 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
位于此文件的第一个条件中:http ://code.google.com/p/lightblog/source/browse/trunk/Sources/ProcessAJAX.php?r=521