php - 为什么 jQuery 使用 UTF-16 进行 POSTing?

标签 php jquery ajax utf-8

我的博客软件的博文创建页面LightBlog使用 jQuery 通过 AJAX 发布内容。奇怪的是,当我通过 jQuery 提交中文字符(中文)时,它以 UTF-16 格式将其发送到服务器。当我禁用 jQuery AJAX 并使用 Firefox 进行 POST 时,它会以 UTF-8 格式发送,就像它应该的那样。

检查 Firebug,jQuery 发送以下内容:%u4E2D%u6587,这显然是 URL 编码的 UTF-16。 Firefox 发送:%E4%B8%AD%E6%96%87,这绝对是 URL 编码的 UTF-8。

jQuery 声称按照 W3 规范以 UTF-8 格式进行 POST,那么为什么它以 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

最佳答案

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

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

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

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

...或

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

关于php - 为什么 jQuery 使用 UTF-16 进行 POSTing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11093523/

相关文章:

java - 检测扬声器是否已插入?

java - Rest API 方法正在返回值,但仍然收到 500 错误

javascript - 加载一个 AJAX 事件会导致所有其他事件在处理之前等待它

php - 防止服务器端脚本、XSS

java - TCP 服务器 Java 与 PHP

java - 如何重定向到 WEB-INF 文件夹内的 JSP

javascript - rails : Ajax for Like button when iterating through status updates

php - 检查 mySQL/PHP 条目是否存在而不会超时?

php - 使用 WooCommerce 和 Bootstrap 以自定义布局开发自定义单一产品页面

javascript - 事件发生后等待 x 毫秒,重新检查并触发