之前搭建了个网站,php.ini里面的default_charset = "gb2312"。然后今天将一个网站放了上面,发现打开里面的汉字都是乱码了,用TXT文本打开发现这些网站保存的编码格式都是UTF-8。那么多网页,我也不可能一个个去修改,在里面加条
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">或header("content-type:text/html; charset=utf-8");了吧。

        于是在php.ini修改default_charset = "utf-8",嗯,这会打开这个网站就是正常不乱码了。

        但是再打开之前一个网站,发现却都变成了乱码了。于是想到之前的网站的代码文件保存的编码发现,用TXT文本打开一看,果然有问题,保存的格式是ANSI。这个网站的文件相对少些,于是都一个个的把它们改为UTF-8的格式。

        再打开一看,发现代码文件里面的汉字不再乱码,但从数据库取出来的数据的汉字却还是乱码。开始以为是数据库的保存编码格式有问题,就登陆MYSQL此网站的数据库去,用show variables like 'character_set_database';查看发现编码格式是gbk,再用alter database mydb character set utf8;把编码格式改为utf8。再打开,汉字仍然是乱码。折腾了好一会,才发现在这个站的源码文件里面,php有这样的一句:mysql_query("SET NAMES 'GBK'");,这句是向MYSQL发出执行一条SQL语句,设定数据库采用GBK编码。终于知道了,即使之前登陆MYSQL用alter database mydb character set utf8;把编码格式改为utf8也没用,因为在php源码里面的这句已经将编码改为GBK了。再是将此句改为mysql_query("SET NAMES 'UTF8'");,保存后再打开网站,一切正常。

    PHP设置读取数据库采用的编码字符集.png