请教一下关于post编码的问题。

kongbai308416350 2012-10-20 10:50:02
先说下需求:用的是jQuery的ajax去post一个表单。数据项都是构造好的。当数据是英文时,一切工作正常,表单也能正常提交,结果也符合预期。

但是,如果提交的数据中包含有中文,就会有乱码。

初步的判断是ajax的post是采用utf-8编码,而页面都是gbk编码。所以提交就是乱码。
于是我找了一个能编码gbk的函数进行转换,但是还是有问题。

正常提交的情况,如果字段是“你好。。。”抓包的结果会是%C4%E3%BA%C3%A1%A3%A1%A3%A1%A3

在本地js中调用函数转化后也是这个结果,但是一旦提交,就会被Utf-8编码成%25C4%25E3%25BA%25C3%25A1%25A3%25A1%25A3%25A1%25A3
显然,这样的提交不正确。

由于只能用js控制客户端(插件),所以那些二次编码,然后服务器端解码的方法就不可行了。去改变服务器页面的gbk编码为utf-8编码也是不可行。

大家一起讨论下。。
...全文
197 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡鱼_ 2012-10-21
  • 打赏
  • 举报
回复
加上这个参数试试:contentType:"application/x-www-form-urlencoded; charset=GBK"
还不行的话就将后面的GBK换成utf-8或gb2312试试

如果上述方法可行,项目中都是要这么做的话,那可以使用以下方法将其设为全局参数,省得每个ajax都得去改动
$.ajaxSetup({contentType:"application/x-www-form-urlencoded; charset=GBK"})
kongbai308416350 2012-10-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

这种情况还真没碰到过。一般页面编码都是统一为utf-8的

你每个参数都这么先编码一下,像:escape('你好。。。'),或者encodeURIComponent()

也会是乱码么?
[/Quote]
encodeURIComponent()用过,这个只是进行URI编码,发送的时候还是得utf-8编一次。所以还是没法直接保留编好的gbk编码。
kongbai308416350 2012-10-21
  • 打赏
  • 举报
回复
crying_boy 耐心帮我调试下已经搞定。

解决方法就是自己构造ajax的data部分。因为如果是交给ajax自己去构造,会由json序列化而采用utf-8编码。
即把data: {msgto:'Shakamilo',message:message,pmsubmit: 'true' }
改成data:'msgto=Shakamilo&message='+message+'&pmsubmit=true',

其实我这个问题不具有通用性,因为在js中还要对信息进行gbk的转码,网上绝大部分方案都是服务器端做一下操作即可。其实如果能控制服务器,也就几行代码。

再次谢谢crying_boy~
kongbai308416350 2012-10-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

加上这个参数试试:contentType:"application/x-www-form-urlencoded; charset=GBK"
还不行的话就将后面的GBK换成utf-8或gb2312试试

如果上述方法可行,项目中都是要这么做的话,那可以使用以下方法将其设为全局参数,省得每个ajax都得去改动
$.ajaxSetup({contentType:"application/x-w……
[/Quote]
这个方法昨天就尝试过了。
还是不行。在contentType指定了application/x-www-form-urlencoded那么在发出消息之前就会编码。
也就是说我要发的消息是%C4%E3%BA%C3%A1%A3%A1%A3%A1%A3
但是抓包的时候就已经被编码成%25C4%25E3%25BA%25C3%25A1%25A3%25A1%25A3%25A1%25A3
只要是用jQuery的ajax方法提交默认就是这样的。没有找到不编码的方式。
泡泡鱼_ 2012-10-21
  • 打赏
  • 举报
回复
这种情况还真没碰到过。一般页面编码都是统一为utf-8的

你每个参数都这么先编码一下,像:escape('你好。。。'),或者encodeURIComponent()

也会是乱码么?

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧