最近写的程序,用Ajax向服务器发送字符串,然后由服务器端接受并存入mysql数据库,由于之前没有料到后来的问题,我整个网站和整个数据库全用的gb2312字符集编码格式,结果到后来就出问题了,插入数据库时,老返回一个错误如下:
Incorrect string value: '\xE5\x9B\x9B\xE5\xA4\xA7...' for column 'text' at row 1
知道应该是编码问题,但是不知道问题出在哪,我看了所有网页编码和声明全是gb2312,和数据库一致啊,为什么会有编码问题呢?
后台php页面我又做了下echo POST接收的数据,乱码!
这说明数据到PHP时已经乱了,这样一来问题就被定位到前台了,于是我仔细看了发送页面代码,我发现Ajax中一句"Content-type"内容为"application/x-www-form-urlencoded",就想到会不会是Ajax编码出问题了,难道是它默认编码有问题,我就在php中用mb_detect_encoding()函数输出字符串编码格式,utf-8,这下问题很明了了,解决办法分两个方向:
我在网上搜了下Ajax如何指定字符串编码格式,结果我发现好多人用的就是把"Content-Type"内容改为"application/x-www-form-urlencoded;charset=XXXX",XXXX指相应编码格式,于是我按照相应需求,XXXX我填了gb2312,可是测试了下,既然还是乱码,这样一来就不知道怎么改了,那位仁兄如能不吝指点下迷津,小弟先行在这里谢过了!
这样只好另外一种方法了,后台编码转换,比较简单,但是效率显然没上一个高,毕竟这些工作给服务器增加了工作量,我用以下语句:
$text=iconv("UTF-8", "GB2312",$text);//$text就是post的内容
这个语句的功能大家一定都猜到了,将字符编码格式从UTF-8转成gb2312,这样一来,重新测试,结果很完美,皆大欢喜了,呵呵。
阅读(5029) | 评论(0) | 转发(0) |