可能存在如下几个方面的问题:
一般的中文编码:gb2312或者gbk(前者的一种扩展),这两种编码缺乏国际通用性,属于中文编码;UTF-8为国际标准编码,一般网页编码使用该编码方式;比如,一般源码都提供 gbk utf-8的2种源码供用户下载试用。
解决方法:修改他们的编码。使得mysql数据库存储输出、apache处理、html页面显示、PHP源代码等四个地方的编码方式一致——都为utf8/utf-8。
(1)html静态页面采用utf-8的设置(为了正确显示,改为注释了。)
添加<--!meta http-equiv="Content-Type" content="text/html; charset=gb2312">,-->
(2)PHP源代码文件采用utf-8字符集
这个在采用的集成编程环境下可以更改。以NetBeans为例,右键点击左侧项目名,在右键菜单中选择“属性”,在属性下找到编码,改为utf-8即可。
(3)提交给web服务器Apache的字符编码
即PHP程序运行时的编码。在PHP文件头上,加入下面的代码段(为了正确显示改为注释了):
<\?php
这段解决的是PHP传输给Apache的中文字符串参数正确显示问题。
(4)PHP传输给mysql的server服务器的参数
这个参数也要按照规则,设置正确的值。系统在调用mysql的接口函数前,如果要用到中文字符串参数(例如查询中文姓名等),则需要设置query的查询参数的字符编码集,方式为调用如下语句:
mysql_query("set names '编码'");
mysqli中用
$mysqli->set_charset('utf8');
其中的'编码'要和php的参数编码(即PHP源文件中的语句编码,即PHP源文件编码)一致,如果php源文件编码是gb2312那'编码'就是gb2312,如果是utf-8那'编码'就是utf8,这样就能保证传输给mysql server服务器的中文字符串参数如期正确传送,插入或检索数据时才不会出现乱码了。
(5)中文字符串在mysql数据库中的正确存储,在mysql中文乱码中已经介绍,可以参看相关设置。