几乎每个刚开始用 PHP 和 mySQL 开发 Web 应用的人,都受到过编码问题的困扰。要么页面原始汉字和从数据库里取出的汉字全是乱码;要么原始汉字和数据库汉字,一个显示正常了,另一个就变成乱码了。很烦很气人!

问题需要一步一步的解决。在实际操作以下方法之前,需要配置 Web 服务器,使其与 PHP 集成,最终可以调试 PHP 程序。我们以常见的 GB2312 和 UTF-8 字符集为例来测试和说明。浏览器是 IE7.0。

一,页面原始汉字乱码的解决

编码的原理我就不说了,网上搜索一下字符串“PHP 乱码”,整框整框的文章供大家阅读。我最关心的是具体怎么做,就可以解决这个实际问题。我最喜欢使用的文本编辑器是 UltraEdit,不仅仅因为它可以进行 16 进制编辑,还因为它支持多编码文档。解决这个问题就需要使用 UltraEdit 的这个功能。

1.1 打开中文 Windows,用 UltraEdit 创建一个文本文件,手工输入一个 PHP 页面文件,文件内容如下。保存为 test1.php 文件,注意保存时“格式”下拉框选择“默认”- 特别注意这里。

页面标题

电脑学习网:

http://www.why100000.com

用 IE 浏览器打开网站的这一页面。可以看到,页面显示正常。在 IE 浏览器的“查看”/“编码”菜单下看到(勾选了“自动选择”),字符编码是 GB2312。

[Firefox 2.0 下显示正常。]

1.2 然后,在 UltraEdit 的“文件”菜单下,选“另存为”,格式选择“UTF-8”,文件名为 test2.php。用 IE 浏览器打开这一页面。可以看到,页面显示正常(其实英文字体已经有略微的变化了)。在 IE 浏览器的“查看”/“编码”菜单下看到(勾选了“自动选择”),字符编码是 UTF-8,自动变了!注意 一句并没有修改,但是浏览器却自动辨别出了真实的字符集编码!看来 IE 还是比较聪明的,也说明 IE 自动判别字符集是比 METE 标签中 charset=xxx 的定义优先的。

[Firefox 2.0 下显示出现乱码。]

1.3 在该页面首部加语句

header(”Content-Type:text/html;charset=utf-8″);

?>

再次保存该页面文件,“格式”下拉框选择“默认”,文件名为 test3.php。用 IE 打开网站里的该文件,这次看到,除过英文字母,汉字变成乱码了!同时在 IE 浏览器的“查看”/“编码”菜单下看到(勾选了“自动选择”),字符编码是 UTF-8,已经被强制改变了。

出现汉字乱码的原因,是因为原本的 GB2312 编码,被强制以 UTF-8 的编码形式显示,所以乱码出现了。这个时候在浏览器里人为指定 GB2312 编码,页面汉字又显示正常了(真正制作页面时是不能这么做的,非要让浏览者自己选择编码,一个是浏览者可能根本不知道怎么选择编码、选什么编码,再者也显得我们太菜了!)。

[Firefox 2.0 下显示出现乱码。]

1.4 在该页面首部加语句

header(”Content-Type:text/html;charset=GB2312″);

?>

再次保存该页面文件,“格式”下拉框选择“UTF-8”,文件名为 test4.php。用 IE 打开网站里的该文件,奇怪:看到页面汉字显示正常,并不是预想到的乱码?!在 IE 浏览器的“查看”/“编码”菜单下看到(勾选了“自动选择”),字符编码仍然是 UTF-8,并没有被强制改变了 GB2312 字符集。

这个时候在浏览器里人为指定 GB2312 编码,发现 IE 浏览器并不能人为指定编码。看来 IE 浏览器对 UTF-8 字符集特别关照。无论是在 META 标签指定,还是 PHP 语句指定,都不能让 IE 浏览器显示出汉字乱码。

[Firefox 2.0 下显示出现乱码。]

小结一下: 以上测试主要在 IE7.0 下进行,Web 服务器为 Windows Server 2003 下的 IIS6.0,PHP 版本为 4.4.7。可以看到,IE7.0 为了正确识别字符集做了很多额外的自动处理的工作,以显示其智能和友好。有时太殷勤了反而使我们不知所措。由于汉字乱码问题与不同的浏览器及其不同的版本、Web 服务器、后台脚本和不同的字符集都有点关系,所以问题显得特别复杂。作为 Web 编程人员,主要关心与自己有关的因素就可以了,没必要成为字符集编码方面的专家。为了兼容目前流行的 IE 和 FF 浏览器,我们可以按照以下简单的方法处理我们的 PHP 代码:

1,页面的真正字符集与 META 标签指定的应该一致;

2,也可以使用 header(”Content-Type:text/html;charset=xxx”); 语句指定字符集,但是不能与字符的真正字符集冲突,也不能与 META 标签冲突。(尽管根据测试结果表明,当 header() 和 META 冲突时,header() 比 META 指定的字符集更优先,因为根据 HttpWatch Basic 跟踪显示,header() 指定字符集后,IE 浏览器 Type 会明确的得到字符集指定。但是不能保证其它非主流浏览器也会这样。)

3,不能与数据库取回的字符的字符集冲突,否则页面会出现页面本身的汉字和数据库取回的汉字,全部乱码或部分乱码问题。

二,数据库乱码的解决及其与页面字符集的配合

mySQL 5.0 在安装完毕后,可以进入配置向导,对一些参数进行设置。其中就有配置服务器默认字符集选项。这里需要选择定制配置,指定一种我们常用的字符集,可以选择支持多字节编码的 UTF8 或 GB2312。因为据说其默认的 Latin1 字符集不支持汉字,因为不支持多字节编码。

……

mysql php 字符集_PHP 和 mySQL 的字符集编码问题(1)相关推荐

  1. php mysql emoji表情_php 让MySQL支持Emoji表情 mysql 5.5.3+

    让MySQL支持Emoji表情 mysql 5.5.3+ 让mysql支持Emoji表情,涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集. mysql 版本 5.6 1 解决 ...

  2. php连接mysql乱码原因_PHP连接MYSQL出现乱码的原因与解决办法

    PHP连接mysql出现乱码的原因与解决方法 解决MySql数据库乱码的一个首要前提是保证 数据库+数据表+前端显示 编码一致,国内项目一般统一设定为GB2312或GBK,而国际化项目则一般使用utf ...

  3. php+mysql投票代码_PHP+jQuery+MySql实现红蓝投票功能

    本文是一篇综合知识应用类文章,需要您具备PHP.jQuery.MySQL以及html和css方面的基本知识.本文在<PHP+MySql+jQuery实现的"顶"和" ...

  4. php 查询mysql数据库 打印_php 查询mysql数据库 打印

    用C语言操纵Mysql 原文:用C语言操纵Mysql 以下代码块是用来连接数据库的通讯过程,要连接MYSQL,必须建立MYSQL实例,通过mysql_init初始化方能开始进行连接. typedef ...

  5. mysql函数封装_PHP访问MYSQL数据库封装类(附函数说明)

    /* MYSQL 数据库访问封装类 MYSQL 数据访问方式,php4支持以mysql_开头的过程访问方式,php5开始支持以mysqli_开头的过程和mysqli面向对象 访问方式,本封装类以mys ...

  6. php获取mysql数据菜鸟_PHP 连接 MySQL | 菜鸟教程

    PHP 连接 MySQL PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP Dat ...

  7. php mysql操作封装_php封装MySQL数据库基本操作

    一周之后就回家喽,闲来无聊,学习了一下 php 面向对象的封装 什么是面向对象: 对象:其实就是对数据和拥有的属性进行封装一种抽象, 故出现了封装,多态的概念,在这里就不扯太多概念性的东西, 还是代码 ...

  8. mysql导入分卷_php实现mysql备份恢复分卷处理的方法_PHP

    本文实例讲述了php实现mysql备份恢复分卷处理的方法.分享给大家供大家参考.具体分析如下: 分卷处理就是把握们要处理的数据分成一个个小文件进行处理了,这里我来给大家介绍一个php mysql备份恢 ...

  9. php和mysql的概述_PHP的MySQL扩展:MySQL数据库概述_MySQL

    一.SQL:结构化查询语言 SQL(Structured Query Language)是高级的非过程化变成语言,专门用于查询和修改数据库的信息以及对数据库进行管理和维护的标准语言.SQL语言结构简单 ...

最新文章

  1. ros web_video_server的使用及Python获取实时画面
  2. 数字滤波器的幅频响应
  3. JGroups 入门实践(转)
  4. linux常用的脚本、命令
  5. 设计模式 过滤器模式
  6. ajax post提交数据_JavaEE学习——为什么get请求方式比post请求方式效率高
  7. Entity Framework 数据并发访问错误原因分析与系统架构优化
  8. 帝国cms文章内容tags关键词设置调用方法以及tags静态化
  9. kubernetes之五:资源管理
  10. java程序员基础算法_java基础算法
  11. Kinect初识 整理总结
  12. 设计模式 (十六) 命令模式
  13. Windows Azure 配置Active Directory 主机(1)
  14. 运行 Excel 脚本
  15. 初入laravel之坑
  16. 高中计算机excelppt,高一信息技术 4.2利用Excel表格处理个人财务教案.doc
  17. Access2016学习12
  18. mysql会话是什么意思_MySQL会话临时表空间有什么作用
  19. CentOS 8: yum设置为阿里源
  20. 这么久了,深爱的人,还好吗?

热门文章

  1. 使用utools一键实现内网穿透
  2. pyLSHash:Python 100行代码实现LSH(Locality Sensitive Hashing)算法
  3. GoF之装饰模式遇见王者荣耀、刺激战场
  4. 【数据挖掘实战】——舆情分析:对微博文本进行情绪分类
  5. html td线怎么显示,html基礎 table標記 設置邊框線粗細 td標簽 相鄰列/行的單元格合並...
  6. proxmark3 PM3GUI pro 华子软件自用退坑回血
  7. 用sumproduct函数计算组内排名
  8. 解决三星note5无线充电偶尔充不进去的问题
  9. 基于Applet的Web在线扫描仪控件
  10. 计算机网络实验报告(交换机的工作原理 )