1

我的博客软件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

4

2 回答 2

3

UTF-16 是从 中返回的escape(this.value),与 jQuery 无关。

尝试escape("中文")在控制台中运行。

您应该使用encodeURIComponent()似乎生成您期望的字符串(“%E4%B8%AD%E6%96%87”),

或者

让 jQuery 通过将数据作为散列而不是字符串传递来完成所有编码部分。

... 或者

不要手动创建数据,而是尝试使用$(".cf").serialize()$(".cf").serializeArray()获取 POST 字符串/数据数组。

于 2012-06-19T07:35:59.200 回答
0

尝试将内容类型设置为UTF-8.

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
于 2012-06-19T02:20:51.023 回答