我们在做PHP项目的时候,经常会遇到中文乱码的问题,有时候编码问题还导致MYSQL的报错。中文乱码总共有三个原因
1:APACHE服务器设置导致乱码
2:PHP,或者HTML页面编码导致中文乱码
3:MYSQL数据库的表以及字段编码导致中文乱码
我们分别从这三个部分来探究PHP程序设计中的编码问题
在这之前我们要了解一些基本理论:
1、文件编码
每个文件在保存的时候都可以选择以什么编码保存,例如用WINDOWS的记事本创建一个文件可以选择ANSI 以及UTF8等等编码。我们选择了什么编码该文件就以这种编码方式保存在硬盘上。 读取该文件数据的时候也会指定一种编码来打开,如果指定的编码与文件保存的时候的编码不一样的话就会出现乱码
2、HTML的编码
在网页头部一般有这样一个<HEAD>区域
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
这个的意思是让客户端知道,接下来输出的是html代码(text/html),并且以下输出的内容都将是utf-8编码的。如果我们用记事本创建一个HTML文件 该文件包含
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
但是在保存的时候却以ANSI编码格式保存,那么我们用浏览器打开这个文件时,浏览器看见META 行的UTF8编码设置后 就将文件以UTF8格式输出,而文件本来是ANSI编码,这样便出现了中文乱码。
一:APACHE服务器编码
在APACHE配置文件中有一行是编码的设置 默认的是AddDefaultCharset ISO-8859-1,大部分人认为应该将这句改为 AddDefaultCharset UTF-8 。而蜗牛认为这是误人子弟。 这项配置是告诉APACHE服务器选用什么样的编码来输出WEB页面(这样做会忽略,HTML页面中的页面编码的设置 EG:<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />),如果我们建立一个GB2312的页面就会出现中文乱码 。所以最好的方法是将AddDefaultCharset ISO-8859-1这一项注释掉 #AddDefaultCharset
二:PHP编码问题
php最终生成的是文本文件,而他要从数据库中取出文本数据,还要把文本数据写到数据库中。由于MYSQL并不知道PHP发送给他的是什么编码的数据,所以需要客户端PHP告诉他存取的是什么编码的数据。然后MYSQL会自动将PHP传送来的数据转换成目标编码格式的数据。
比如: PHP要将 文本数据DATE 写入到数据库字段field中,PHP发送的是UTF-8编码的数据,而DATE是以GB2312方式存储的。这时候PHP通过设置告诉MYSQL 我发的是UTF-8格式,MYSQL接到数据后 说:”我知道了,来谁专门负责将UTF-8转换成GB2312“ 于是MYSQL中的一个专门负责此事的小兵跑来 把数据拿走经过加工放到指定位置,如果PHP误将UTF-8编码的数据 当作GB2312编码 送给MYSQL的时候,MYSQL会叫上次那个负责UTF-8—-GB2312的小兵来负责,而小兵不管三七二十一按同样方法转换存起来,这就出现了错误,乱码就产生了。取数据的时候也一样,PHP要告诉MYSQL要取出什么样编码的数据。
PHP通过character_set_client告诉MYSQL,php存入数据库的是什么编码方式
PHP通过character_set_results告诉MYSQL,php需要取什么样编码的数据
PHP通过character_set_connection告诉MYSQL,PHP查询中的文本,使用什么编码
就算上面的大家都注意了,还有个问题也可能导致乱码。那就是PHP文件(生成的HTML页面)本身的编码问题
如果MYSQL传来的数据 编码与PHP本身编码不一致也会导致乱码
三:MYSQL编码问题
Mysql目前支持多字符集,并且,支持在不同的字符集之间转换(便于移植和支持多语言)。
Mysql可以设置服务器级字符集、数据库级字符集、数据表级字符集、表列的字符集,实际上,最终使用字符集的地方是存储字符的列,比如,你设置 table1中col1列是字符类型,col1才用到了字符集,如果table1表的col2列是int类型,col2不使用字符集的概念。
服务器级字符集、数据库级字符集、数据表级字符集都是为列的字符集做默认选项的。
Mysql一定有一个字符集,可以通过启动时加参数指定 ,也可以编译时指定,也可以在配置文件里指定。Mysql服务器字符集,只是做为数据库级的默认值。创建数据库时,你可以指定字符集,如果没指定,就使用服务器的字符集。同理,创建表时,你可以指定表级的字符集,如果没指定,使用数据库的字符集做为表的字符集。创建列时,你可以指定某列的字符集,如果没指定,就使用表的字符集。
通常情况下,您只需设置服务器级的字符集,其它的数据库级,表级,以及列级的字符集,都继承自服务器级字符集。
由于UTF8是最广的字符集,所以,一般情况下,我们设置Mysql服务器级的字符集为UTF8!
总结:
要保证不乱码,需将三个编码统一:
一:是网页自身的编码
二:是HTML里指定的编码
三:是PHP告诉Mysql的编码(包括character_set_client和character_set_results)。
第一和第二个编码,如果使用DW之类的编辑器写的网页,通常是一致的,但用记事本写的网页,有可能不一致。
第三个编码,需要手工通知Mysql。这步可以通过在PHP里使用mysql_query(“set names characterX”)来实现。
分享到:
相关推荐
《基于PHP的LOGA5X建站系统utf-8源码深度解析》 在Web开发领域,PHP语言因其开源、跨平台以及丰富的功能库而备受青睐。本文将深入探讨一个基于PHP的LOGA5X建站系统,该系统采用utf-8编码,旨在为用户提供高效、稳定...
《Dreamweaver 8与PHP源代码深度解析》 Dreamweaver 8是Adobe公司推出的一款强大的网页设计和开发工具,它集成了直观的可视化编辑界面和强大的代码编辑功能,深受广大Web开发者喜爱。结合PHP语言,这款软件更是能够...
1. **创建Web服务器**:你需要在服务器上搭建PHP环境,例如使用XAMPP或WAMP这样的集成开发环境,包含Apache服务器和PHP解析器。 2. **建立数据库连接**:在PHP中使用`mysqli`或`PDO`扩展来连接到MySQL服务器。配置...
《PHP后台管理系统的深度解析与应用》 PHP后台管理系统,作为Web开发中的重要组成部分,它在构建高效、安全的企业级应用中发挥着至关重要的作用。本文将深入探讨PHP语言在后台管理系统中的应用,以及相关的核心技术...
《PHP博客系统Simple-Log深度解析》 PHP作为一款开源且功能强大的服务器端脚本语言,在Web开发领域占据着重要地位。本实例“Simple-Log”是一个基于PHP构建的简单博客系统,它为我们提供了一个理解PHP如何处理动态...
《PHP竞价页订单管理系统——深度解析caozha-order源码》 PHP作为一款广泛应用的服务器端脚本语言,尤其在Web开发领域占据了重要的地位。本文将深入探讨一个基于PHP实现的竞价页订单管理系统——caozha-order。这个...
2. Wamp服务器搭建:WAMP是Windows、Apache、MySQL和PHP的组合,用于在Windows环境下搭建本地PHP开发环境。 3. PHP运行管理:理解PHP的运行机制,包括CGI、FastCGI以及PHP-FPM。 4. BS和CS详解:BS(Browser/Server...
《搭建BBS论坛:Discuz X3.3 SC UTF8深度解析》 Discuz! X3.3 SC UTF8是一款广泛使用的开源BBS(Bulletin Board System,电子公告板)论坛软件,它以其强大的功能和易用性深受广大用户的喜爱。这款软件支持UTF-8...
通过搭建Apache+PHP+MySQL服务器环境,学生掌握了服务器配置和开发环境的搭建。接着,他们学习了数据库开发技术,为后续系统开发打下基础。在路由器和交换机的连接与配置过程中,学生们分组进行,调试设备并实现数据...
《5vShop商城系统 v2.5:深度解析与应用指南》 5vShop商城系统是一款广泛应用在电子商务领域的开源软件,版本2.5是其在不断优化和升级后的产物,旨在提供更稳定、功能更丰富的在线购物解决方案。本文将深入探讨5...
《SyueBook(岁月联盟留言本) 1.0毕业设计——深度解析与技术探讨》 SyueBook,作为一款由岁月联盟开发的留言本系统,版本1.0的发布标志着一个初具规模的交互平台的诞生。这个系统不仅包含了完整的源代码,还能够...
**EditPlus:专业文本编辑器的深度解析** EditPlus是一款备受推崇的文本编辑器,尤其在Web开发和数据库SQL编写领域中,它以其强大的功能和高效的工作流程深受程序员喜爱。这款软件不仅提供基本的文本编辑功能,还...
很抱歉,但您提供的文件内容似乎包含了一些无法识别的字符和编码,这使得直接解析出相关的IT知识点变得困难。不过,从标题"交通运行状态评价系统解决方案"来看,我们可以推测这个文档可能涉及以下IT领域的知识点: ...
- **服务器配置**: 使用如Apache、Nginx等服务器软件,进行域名解析和SSL证书设置。 - **持续集成/持续部署(CI/CD)**: 通过Git等版本控制系统实现代码管理和自动化部署。 - **性能监控与优化**: 监控网站性能,...