php乱码问题解决

   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;

   以上几点都设置统一之后应该是不存在乱码问题了

   如果有遗漏与错误,还请指正与谅解,还是新手一枚


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值