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使用问题
抱歉,评论功能暂时关闭!