php的乱码问题是困扰新手的一个常见问题。
解决问题之前自然要明白产生问题的原因:每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII 码, 中国的 GB2312-80,日本的 JIS 等。
知道原因后解决办法也就很明了了:统一字符编码集。
1.php文件本身的编码
使用EditPlus保存文件的时候记得选择编码,文件另存为,在编码中选择一致的编码
2.网页的编码
2.1对于html静态页面可以在head中添加以下代码
声明客户端的浏览器用什么字符集编码显示该页面
<meta http-equiv="Content-Type" content="text/html; charset=xxx">
2.2对于php文件可以添加以下代码
header("content-type:text/html; charset=xxx");
这个函数header()的作用是把括号里面的信息发到http标头。
看起来效果和上面的差不多,但是因为两者采用的手段不同,前者使用的是meta标签,属于html信息。后者是http标头,会比html信息更先到达浏览器。
2.3 AddDefaultCharset
Apache 根目录的 conf 文件夹里,有整个Apache的配置文档httpd.conf。
其中有一行AddDefaultCharset xxx,置整个服务器内的网页文件https标头里的字符集为你默认的xxx字符集,相当于给每个文件都 加了一行header("content-type:text/html; charset=xxx")。
2.4 php.ini 中default_charset
default_charset = xxx 定义了 php 的默认语言字符集。一般推荐注释掉此行,让浏览器根据网页头中的 charset 来自动选择语言,这样就可以在同台服务器上提供多种语言的网页服务。
3.数据库的编码
对于动态网站来说很多时候页面上要显示的数据来自于数据库,因此数据库数据编码的统一同样很重要
这包括了1.数据库编码;2.表单编码;3.字段编码
3.1通过命令修改编码
3.1.1首先查看数据库字符编码,命令为:
show variables like’collation_%’;
show variables like’character_set_%’;
3.1.2在命令行修改字符编码(例如gb3212)
set character_set_client=gb2312;客户端编码方式
set character_set_connection= gb2312;建立连接使用的编码
set character_set_database= gb2312;数据库的编码
set character_set_results= gb2312;结果集的编码
set character_set_server= gb2312;数据库服务器的编码
保证前五个采用的编码方式一样,就不会出现乱码问题。
set character_set_system= gb2312;
set collation_connection= gb2312;
set collation_database= gb2312;
set collation_server= gb2312;
3.2通过修改mysql配置文件来更改编码打开mysql的安装目录,找到my.ini这个文件,打开文件
找到default-character-set=gb2312这个字段,它就是设置编码的,后面的是编码格式,更改成你所想要的,然后重启mysql服务即可
4.php连接数据库时的设置
连接数据库时mysql_select_db()后面,要加一句 mysql_query( set names utf8 );
这句话的效果相当于上面的
set character_set_client =gbk;
set character_set_connection = gbk;
set character_set_results = gbk;
如果有遗漏与错误,还请指正与谅解,还是新手一枚