如何解决php中文字符乱码问题-PHP问题

资源魔 22 0

php中文字符乱码的处理方法:一、改mysql设置装备摆设文件“my.ini”或“my.cnf”;二、正在需求做数据库操作的php顺序前退出语句“mysql_query("set names '编码'");”;三、将效劳器编码集设置为“UTF-8”。

PHP中文乱码缘由及处理方法剖析

PHP网页的编码

1.假如欲应用gb2312编码,那末php要输入头:header("Content-type:text/html;charset=gb2312");,动态页面增加,一切文件的编码格局为ANSI,可用记事本关上,另存为抉择编码为 ANSI,笼罩源文件。

2.假如欲应用utf-8编码,那末php要输入头:header("Content-type:text/html;charset=utf-8");,动态页面增加,一切文件的编码格局为utf-8。保留为utf-8可能会有点费事,普通utf-8文件扫尾会有BOM,假如应用session就会出成绩,可用editplus来保留,正在editplus中,对象->参数抉择->文件->UTF-8署名,抉择老是删除了,再保留就能够去掉BOM信息了。

3.php自身没有是 Unicode 的,一切substr之类的函数患上改为mb_substr(需求装 mbstring 扩大);或许用 iconv 转码。

PHP与Mysql的数据交互

PHP与数据库的编码应分歧

1.修正mysql设置装备摆设文件my.ini或my.cnf,mysql 最佳用 utf-8 编码

[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,这样拔出或检索数据时就没有会呈现PHP中文乱码了。

对于编码

一、字符集:

正在较量争论机底层中数据存储的都是二进制数据,要想猎取真正无意义的字符,就必需让二进制数据与每个字符对应起来,这类对应关系就构成了一张编码表。

罕用字符集:

ISO-8859-1 拉丁码表 latin,示意西欧言语,应用一个字节即8位示意数据。

GB2312 简体中文码表。蕴含6000-7000中文以及符号。用两个字节示意。两个字节都是扫尾为1,都为正数。

GBK 今朝最罕用的中文码表,2万的中文以及符号。用两个字节示意数据。

Unicode 国内规范码,无论是甚么文字,都用两个字节存储。

UTF-8 基于Unicode,一个字节就能够存储数据,不必两个字节存储,并且这个码表愈加的规范化,正在每个字节头退出了编码信息。

(Linux 默许应用的 ISO-8859-1,win32默许应用的GB2312)

二、编码息争码

编码: 将字符转换成正在字符集中对应的编码

解码: 正在字符集中查找出编码对应的字符

中文正在网络中的传输进程

一、以Java为例,eclipse默许应用 UTF-8 编码集,Tomcat 效劳器默许应用 ISO-8859-1编码集,阅读器普通默许应用 GBK 编码集。

顺序与效劳器之间以字符传输,效劳器与阅读器之间以字节传输。

二、中文传输进程:

阅读器中的中文字符----->进行编码----->效劳器----->进行解码----->顺序;

顺序中的中文字符----->效劳器----->进行解码----->阅读器----->编码进行显示

三、乱码孕育发生缘由以处理形式:

(1)、阅读器中的中文字符以 GBK 进行编码,以字节省传输到效劳器,效劳器再以 ISO-8859-1进行解码,以字符的方式传输给顺序。

由于 ISO-8859-1 编码集没有支持中文字符,一切解码后的字符都是西欧字符,把这些字符传输给顺序就孕育发生了乱码;

针对这个缘由,只需把效劳器的编码集设置为 UTF-8 便可:

request.setCharacterEncoding("UTF-8");

但这类办法只能用于POST申请形式,由于设置只会作用于申请体中的内容,假如是GET申请形式,可用先解码再编码的形式:

byte[] buffer = request.getParameter("word").getBytes("ISO-8859-1");  //进行编码
String newStr = new String(buffer,"UTF-8");  //进行解码

(2)、顺序中的中文字符原样传输到效劳器,效劳器要先对中文字符进行编码再传输给阅读器,但由于 ISO-8859-1 编码集没有支持中文字符,以是正在字符集中查找没有到对应的编码,编码后就变为了问号,传输给了阅读器并显示;

针对这类状况,要进行两次设置:

response.setCharacterEncoding("UTF-8");//将效劳器编码集设置为UTF-8
response.setContentType("text/html;charset=UTF-8"); //将阅读器编码集设置为UTF-8

实际上第二行设置曾经蕴含了对效劳器的设置,以是通常只需写第二句代码便可。

更多相干常识,请拜访PHP中文网!

以上就是若何处理php中文字符乱码成绩的具体内容,更多请存眷资源魔其它相干文章!

标签: php 乱码 php教程 php故障解决 php使用问题

抱歉,评论功能暂时关闭!