朋友们刚学习php的时候,常常会发现浏览器中输出的内容会出现一堆的乱码问题,尤其是输出中文的时候。为什么会出现有乱码的情况呢?一般来说,乱码的出现有2种原因,一种是由于编码(charset) 设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”,第二种就是文件被以错误的编码打开,然后保存,比如一个文本文件原先是GB2312 编码的,却以UTF-8 编码打开再保存,就会出现乱码的问题。在下面的文章中,我们就来聊聊php中文乱码问题和解决方案。
php中文乱码问题
第一种:解决HTML中中文乱码问题方法
如果你的HTML文件文件出现了乱码问题,那么你可以在head标签里面加入UTF8编码(国际化编码):UTF-8是没有国家的编码,也就是独立于任何一种语言,任何语言都可以使用的。
第二种、HTML和PHP混合的页面解决方案
第三种、纯PHP页面的中文乱码问题(数据是静态的)
第四种、PHP+Mysql中文乱码问题
这个除了按照第三种所说的操作之外,还要在你的数据查询/修改/增加之前加入数据库编码。而且,值得注意的是,这里的UTF8和之前的不一样,中间是没有横线的。
header("Content-Type: text/html; charset=utf-8"); $str = '处理使用strrev()函数时的乱码问题'; function cnstrrev($str) { $len = strlen($str); for($i = 0; $i < $len; $i++) { $char = $str{0}; if(ord($char) > 127) //ord()函数取得第一个字符的ASCII码,如果大于0xa0(127)的话则是中文字符 { $i+=2;//utf-8编码的情况下,一个中文字符占三个字节 if($i < $len) { $arr[] = substr($str, 0, 3);//utf-8编码的情况下,一个中文字符占三个字节 $str = substr($str, 3); } } else { $arr[] = $char; $str = substr($str, 1);//否则为非中文,占一个字符 } } return join(array_reverse($arr));//以相反的元素顺序返回数组: } echo $str.'+'.cnstrrev($str);
3. php中json_encode UTF-8中文乱码的解决方法
这种简单的做一个代码转换,urlcode之后再返回所需数组
public static function encodeOperations ($array) { foreach ((array)$array as $key => $value) { if (is_array($value)) { encodeOperations($array[$key]); } else { $array[$key] = urlencode(mb_convert_encoding($value,'UTF-8','GBK')); } } return $array; }
url编码
语法: string urlencode(string str);
返回值: 字符串
函数种类: 编码处理
url解码
还原 URL 编码字符串。
语法: string urldecode(string str);
返回值: 字符串
函数种类: 编码处理
5. php中json_encode处理gbk与gb2312中文乱码问题的解决方法
可见即使用UTF8编码的字符,使用json_encode也出现了中文乱码。解决办法是在使用json_encode之前把字符用函数urlencode()处理一下,然后再json_encode,输出结果的时候再用函数urldecode()转回来。
因为XMLHttp在处理返回的responstText的时候把responstBody按UTF-8编码进行解码的,如果服务器端送出的数据流的确是UTF-8编码,那么中文字就会正确显示,但如果是GBK或是其他编码则会出现上述情况。
相关问答
2. php 中文乱码
【相关推荐】
1. php中文网免费视频教程:《php.cn独孤九贱(4)-php视频教程》
2. php中文网相关文章:《php入门教程之一周学会PHP》
Atas ialah kandungan terperinci php中文乱码问题解决方案汇总. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!