gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:15:08 25 4
gpt4 key购买 nike

我的博客软件的博文创建页面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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com