Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么jQuery在UTF-16中发布?_Php_Jquery_Ajax_Utf 8 - Fatal编程技术网

Php 为什么jQuery在UTF-16中发布?

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规范使

我的博客软件的博客帖子创建页面使用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
条件中:

尝试将内容类型设置为
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()设置它.你说得对。我有一个朋友帮了我的忙,大约一个小时前我们得出了完全相同的结论。不过,谢谢你的回答!