网页出现中文乱码的原因有很多,包括网页文件编码、mysql数据库编码、网页程序编码转换等诸多原因,这里归纳一下曾经碰到中文乱码的情况:
1. 网页文件编码错误
如php文件编码为gb2312,而数据库或网页编码meta编码为utf-8,编码错误导致php文件输出网页出现中文乱码。修改网页文件编码:如在editplus中修改文件编码:document->file encoding->changing file encoding 设置为utf-8。
2. 网页程序函数编码错误
如php的实体转换htmlentities 函数出现中文乱 码 ,为htmlentities加上 参数utf-8即可,如$body = htmlentities($body, ENT_QUOTES, “utf-8″);
3. mysql数据库编码问题
比如ubuntu系统下 lamp搭建mysql 数据库默认编码为latin1, 和windows 系统下配置mysql数据库不一样,经常会出现中文乱码的情况。修改mysql 数据库的配置文件,如远方博客使用gedit:sudo gedit /etc/mysql/my.cnf。在[mysqld]部分添加default-character-set=utf8;在[client]部分添加default-character-set=utf8。改变设置后重启mysql:service mysql restart 或/etc/rc.d/init.d/mysql restart重启,其中mysql系统服务service mysql restert仅在INSTALL-BINARY即bin目录下可以启动mysql,如shell> bin/mysqld_safe –user=mysql。
设置后可以检验一下mysql数据库是否已经设置成功了utf-8编码:sudo mysql -u root -p*****(输入密码) mysql> show variables like ‘character_set_%’; 和mysql> show variables like ‘collation_%’;
4. mysql数据库表和字段默认编码
ubuntu 中mysql 数据库字段在默认情况下也是设置为latin1_swedish_ci。应修改已创建的数据库编码,命令:sudo gedit ‘/var/lib/mysql/已创建的数据库名称/db.opt’.修改default-character-set=latin1 default-collation=latin1_swedish_ci为default-character-set=utf8 default-collation=utf8_general_ci。修改之后重起MYSQL。以后指定编码创建数据库:mysql>create database dbname character set utf-8;最后同时也要把mysql 的Collation设置为utf8_general_ci。
5. 网站服务器系统编码
linux/Unix系统下搭建的网站服务器文件FTP下载到windows 服务器上使用,有时候也会出现乱码,需要在ftp工具中进行文件传输编码设置,如FlashFXP设置:Site Manager->Advanced->character encoding->设置Auto或UTF-8,Filezilla设置也差不多。
6. 浏览器客户端编码/网页文件编码
在中文windows 系统下的浏览器一般默认为简体中文gb2312,若网页文件没有设置header 编码,utf8 数据则会出现乱码。所以要在网页文件中指定文件编码。