用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2912|回复: 8
收起左侧

[HELP] 今天遇到新的编码问题,很郁闷

[复制链接]
发表于 2011-8-31 11:56:07 | 显示全部楼层 |阅读模式
本帖最后由 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);就正常,有谁帮我找出是什么问题??



发表于 2011-8-31 13:34:30 | 显示全部楼层
真神奇
帮顶了
应该还是字符集的问题
发表于 2011-8-31 13:57:55 | 显示全部楼层
utf8格式,是用三个字节保存一个字符。既每个汉字由存储需要3个字节。感觉问题可能还是出在这里。
如果你尝试的方法都无效的话,是不是可以这样。
先写个if判断,判断多少个汉字。
然后用mb_substr($str1,$str2,'utf-8');截取。不过这样很麻烦。
发表于 2011-8-31 15:19:14 | 显示全部楼层
应该是 mysql 的配置问题,mysql 默认没配置成 utf8 的。
或者 databases.php 里没设置 utf8 ?
 楼主| 发表于 2011-8-31 17:31:50 | 显示全部楼层
databases.php设置utf8了

如果mysql默认不是utf8,用程序能改成正常不

请Hex指点
发表于 2011-9-1 13:54:07 | 显示全部楼层
在你的控制器里使用数据库前: this->db->query("set names' utf8'")); 改变数据库集
 楼主| 发表于 2011-11-1 18:35:43 | 显示全部楼层
以前用1.7.x都没问题过
发表于 2011-11-1 19:53:32 | 显示全部楼层
如果是字符串编码问题的话你可以使用iconv转换一下编码
发表于 2011-11-1 23:29:33 CI中国手机版 | 显示全部楼层
好像有人说过这个ci扩展的函数会有问题,用php原生的就好了

本版积分规则