今天遇到新的编码问题,很郁闷
本帖最后由 trynews 于 2011-8-31 12:00 编辑1、CI2.0.2版
2、PHP5.2.6
3、Mysql5.0.33
4、文件编码、数据库编码、连接数据库编码均是utf-8
5、其它存取数据均正常,唯一的问题是以中文数据条件查询数据时有问题,且奇个数中文即出现乱码,偶个数中文正常
6、取数据用Active Record 类
例:
当使用
$this->db->where('roomname','标准房');
查询记录时
打印生成的sql是: `roomname` = '标准��\�'
当是
$this->db->where('roomname','标准房房');
打印生成的sql是: `roomname` = '标准房房'
一切正常
当是奇个数中文是就会出乱码。
我跟踪了一下代码,查到mysql_driver.php里调用了mysql_real_escape_string()函数
echo $str;//这里正常,显示"标准房"
$str = mysql_real_escape_string($str, $this->conn_id);//$str=标准房
echo $str;//转换后出现乱码,显示"标准��\�"
如果改成$str = mysql_escape_string($str, $this->conn_id);就正常,有谁帮我找出是什么问题??
真神奇
帮顶了
应该还是字符集的问题 utf8格式,是用三个字节保存一个字符。既每个汉字由存储需要3个字节。感觉问题可能还是出在这里。
如果你尝试的方法都无效的话,是不是可以这样。
先写个if判断,判断多少个汉字。
然后用mb_substr($str1,$str2,'utf-8');截取。不过这样很麻烦。 应该是 mysql 的配置问题,mysql 默认没配置成 utf8 的。
或者 databases.php 里没设置 utf8 ? databases.php设置utf8了
如果mysql默认不是utf8,用程序能改成正常不
请Hex指点 在你的控制器里使用数据库前: this->db->query("set names' utf8'")); 改变数据库集 以前用1.7.x都没问题过 如果是字符串编码问题的话你可以使用iconv转换一下编码 好像有人说过这个ci扩展的函数会有问题,用php原生的就好了
页:
[1]