一个很奇怪的 AJAX GET 导致的乱码问题.

2014-07-04 16:12:28 +08:00
 Actrace
windows系统,chrome+firefox.
页面里通过AJAX GET发送更新数据的请求到API接口.
更新后的中文数据存入数据库后会乱码.
通过Network抓包,然后把GET的URL用新标签页打开.
数据就正常更新了.

windows系统,IE浏览器,一切正常.

更诡异的是我用Mac上的safari,chrome,firefox去测试,所有功能都正常.

前后端的编码都是统一用的UTF-8.

有大神帮忙看看么.
4220 次点击
所在节点    PHP
14 条回复
belin520
2014-07-04 16:16:05 +08:00
urlencode & urldecode ?
sampeng
2014-07-04 16:31:32 +08:00
编码问题。毫无疑问。。。你编码是utf-8。
但是传输不一定是。ajax也可以设置编码格式吧。不记得了。。另外。。你到底是ajax还是jsonp。。。后者可能会出现这个情况。
总有一个地方是编码不对的。
Actrace
2014-07-04 16:49:39 +08:00
@sampeng 我在出现问题的chrome上抓包,然后在后端里打印出用于update的语句,语句是完全没问题的.我勒个去.但是数据库里的数据就是有问题.
kmvan
2014-07-04 17:04:26 +08:00
不同统一
skydiver
2014-07-04 17:05:54 +08:00
输出的时候加header Content-Type: application/json
skydiver
2014-07-04 17:06:16 +08:00
@skydiver 没写全

输出的时候加header Content-Type: application/json, charset=utf8
skydiver
2014-07-04 17:07:05 +08:00
@skydiver 我去。。又写错。。Content-Type: application/json; charset=utf8
zhangsan
2014-07-04 17:07:55 +08:00
ajax get 的时候 encodeURIComponent 下 中文字符的参数,然后服务端接收的时候 urldecord 下
Actrace
2014-07-04 17:22:26 +08:00
@skydiver
@kmvan
@zhangsan

我来补充一下,传值,编码,完全正常.而且抓包打印回来的SQL语句复制出来放数据库里执行也是没问题的.
甚至我Mac上的所有浏览器,Windows上的IE浏览器都能正常使用所有功能,唯独firefox,chrome发起的AJAX GET请求,会导致数据库更新操作的内容乱码,但是新开标签页去发送这个GET请求(完全一样),就不会乱码.
sampeng
2014-07-04 17:39:59 +08:00
@Actrace
抓包打印。。你是如何抓包打印?输出页面?输出到html上?那你还是在这个环境里。。你把sql输出到文件里面试试= =!就知道编码对不对了。。

get的编码不是utf-8.。。。。
ie和chrome/firefox的get编码也不一样~所以才要求对中文进行urlencode。。
别直接传递中文。。请urlencode。到那边了再解开。。这是一般的做法。也就不会有问题
zhangsan
2014-07-04 21:17:57 +08:00
@Actrace 你还是听大家的,get的时候 把参数encodeURIComponent 下,试试。

windows上 chrome 跟 firefox 都是自动对 url 编码的。
Actrace
2014-07-05 12:15:41 +08:00
@zhangsan 多谢各位支招,我现在在尝试。

@sampeng 直接打印到日志确实发现一些奇怪的问题。有一些包含中文的GET请求在后端打印出SQL语句,如果该GET请求正常日志里面有中文字符也能正常显示,不过有一定几率异常,这个时候写入日志后就会异常,连同以前能正常显示中文字符的语句也跟着变乱码了。
caofugui
2014-07-05 18:19:15 +08:00
先把中文加密,入库的时候再解密不就完了。
Actrace
2014-07-05 18:22:39 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/120971

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX