CI 读取中文字段乱码问题
CI 读取Mysql 中文字段 出现了乱码,怎么解决呢谢谢 请设置 Mysql 的编码。应该是你的数据库编码和网页编码不一致造成的。
config.php/databases.php 里有编码设置。 老大,如果是PHP4下面,请参照
http://codeigniter.org.cn/forums/thread-395-1-1.html
上面的说明。 我遇到过类似的问题
application/config/database.php中这么设置
...
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
会使得从数据库中查出来的中文以utf8格式编码,如果HTML页面是gbk编码就会出现乱码
必须手工对每个字段进行转码,例如:
echo iconv('utf-8', 'gbk', $row->title);
当然这么干是很恐怖的事情,不仅硬编码字符串,而且工作量极大。
但是当我把application/config/database.php改为gbk时,
...
$db['default']['char_set'] = "gbk";
$db['default']['dbcollat'] = "gbk_general_ci";
页面会报告字符集不能设置为gbk,我没打算深入研究mysql的字符集,所以仅仅只是查了一下CI的源码,发现是
system/database/drivers/mysql/mysql_driver.php中的db_set_charset函数出了问题:
function db_set_charset($charset, $collation)
{
return @mysql_query("SET NAMES '".$this->escape_str($charset)."' COLLATE '".$this->escape_str($collation)."'", $this->conn_id);
}
进一步测试,发现
mysql执行查询SET NAMES 'gbk'没有问题,但是执行SET NAMES 'gbk' COLLATE 'something'就会报错,进而影响mysql的查询语言集设置
或许也和我安装mysql时的字符集设置有关,总之我不想纠缠,先解决问题为妙,方法如下:
function db_set_charset($charset, $collation)
{
//解决设置gbk时报错的问题
return @mysql_query("SET NAMES '".$this->escape_str($charset)."'", $this->conn_id);
//return @mysql_query("SET NAMES '".$this->escape_str($charset)."' COLLATE '".$this->escape_str($collation)."'", $this->conn_id);
}
在模板、页面和mysql中全部使用gbk编码 只要保持数据库配置文件中的编码和视图文件中的编码保持一致就不会出现乱码。。:) 原帖由 sam 于 2008-3-29 16:40 发表 http://codeigniter.org.cn/forums/images/common/back.gif
只要保持数据库配置文件中的编码和视图文件中的编码保持一致就不会出现乱码。。:)
我的数据库是utf8_unicode_ci,
html 申明了
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
当然保存也为utf8
但还是出乱码,config/database.php 里也
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_unicode_ci";
这样配了,可是还是出,
[ 本帖最后由 默生 于 2008-6-10 18:04 编辑 ] 把你的关键文件打包发上来看看。
hex 我的包
这个包!
页:
[1]