吾知网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5316|回复: 1
打印 上一主题 下一主题

php乱码解决

[复制链接]
跳转到指定楼层
楼主
发表于 2015-10-22 15:43:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
解决乱码

一.首先是PHP网 页的编码
1.php文件本身的编码与网页的编码应匹配
a.如果欲使用gb2312编码,那么php要输出 头:header("Content-Type:text/html;charset=gb2312");,静态页面添加<meta http-
equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码
为ANSI,覆盖源文件。
b.如 果欲使用utf-8编码,那么php要输出头:header(“Content-Type: text/html; charset=utf-8"),静态页面添加<meta http-
equiv="Content-Type" content="text/html; charset=utf-8">,所有文件的编码格式为utf-8。保存为utf-8可能会有点麻烦,一般
utf-8文件开头会有BOM,如果使用 session就会出问题,可用editplus来保存,在editplus中,工具->参数选择->文件->UTF-8签名
,选择总 是删除,再保存就可以去掉BOM信息了。
2.php本身不是Unicode的,所有substr之类的函数得改成 mb_substr(需要装mbstring扩展);或者用iconv转码。
二.PHP与Mysql的数据交互
PHP 与数据库的 编码应一致
1.修改mysql配置文件my.ini或my.cnf,mysql最好用utf8编码
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-storage-engine=MyISAM
在 [mysqld]下加入:
default-collation=utf8_bin
init_connect='SET NAMES utf8'
2.在需要做数据库操作的php程序前加mysql_query("set names '编码'");,编码和php编码一致,如果php编码是gb2312那mysql编码
就是gb2312,如果是utf-8那mysql编码就是 utf8,这样插入或检索数据时就不会出现乱码了
沙发
 楼主| 发表于 2015-10-22 15:56:09 | 只看该作者
数据库连接编码:指的是进行数据库操作时候以哪种编码与数据库传输数据,这里需要注意的是不要与数据库本身的编码混淆,比如MySQL内部默认是latin1编码,也就是说Mysql是以latin1编码来存储数据,以其他编码传输给Mysql的数据会被转换成latin1编码。

知道了WEB开发中哪些地方涉及到了编码,也就知道了PHP页面乱码产生的原因:上述3项编码设置不一致,由于各种编码绝大部分是兼容ASCII的,所以英文符号不会出现,中文就倒霉了。下面是一些常见的错误情况与解决:

1、数据库采用GB2312编码,而页面申明编码是UTF8,这是最常见的产生乱码的原因。这时候在PHP脚本里面直接SELECT数据出来的就是PHP页面乱码,需要在查询前先使用:

mysql_query("SET NAMES UTF8"); 来设定MYSQL连接编码,保证页面申明编码与这里设定的连接编码一致(GBK是GB2312的扩展)。如果页面是UTF-8编码的话,可以用:
mysql_query("SET NAMES UTF8"); 注意是UTF8而不是一般用的UTF-8。假如页面申明的编码与数据库内部编码一致可以不设定连接编码。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|吾知网 ( 粤ICP备13013563号-1 )

GMT+8, 2024-4-29 12:06 , Processed in 1.078125 second(s), 7 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表