php+mysql+apache 编码深度解析
我们在做 PHP 项目的时候,经常会遇到中文乱码的问题,有时候编码 编码问题还导致 MYSQL 的报错。中文乱 编码 码总共有三个原因 1:APACHE 服务器设置导致乱码 2:PHP,或者 HTML 页面编码 编码导致中文乱码 编码 3:MYSQL 数据库的表以及字段编码导致中文乱码 我们分别从这三个部分来探究 PHP
程序设计中的编码 编码问题 编码 在这之前我们要了解一些基本理论: 1、文件编码 每个文件在保存的时候都可以选择以什么编码 编码保存,例如用 WINDOWS 的记事本创建一个文件可以选择 编码 ANSI 以及 UTF8 等等编码 编码。我们选择了什么编码 编码该文件就以这种编码 编码方式保存在硬盘上。 读取该文件数 编码 编码 编码 据的时候也会指定一种编码 编码来打开,如果指定的编码 编码与文件保存的时候的编码 编码不一样的话就会出现乱码 编码 编码 编码 2、HTML 的编码 在网页头部一般有这样一个区域
这个的意思是让客户端知道,接下来输出的是 html 代码(text/html),并且以下输出的内容都将是 utf-8 编码的。如果我们用记事本创建一个 HTML 文件 该文件包含
但是在保存的时候却以 ANSI 编码格式保存,那么我们用浏览器打开这个文件时,浏览器看见 META 行的 UTF8 编码设置后 就将文件以 UTF8 格式输出,而文件本来是 ANSI 编码,这样便出现了中文乱码。 一:APACHE 服务器编码 在 APACHE 配置文件中有一行是编码 编码的设置 默认的是 AddDefaultCharset ISO-8859-1,大部分人认为应 编码 该将这句改为 AddDefaultCharset UTF-8 。而蜗牛认为这是误人子弟。 这项配置是告诉 APACHE 服务 器选用什么样的编码 编码来输出 WEB 页面(这样做会忽略,
HTML 页面中的页面编码 编码的设置 EG:
),如果我们建立一个 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 目前支持多字符集,并且,支持在不同的字符集之间转换(