php中文乱码问题解决方法

导入php中文乱码问题一般就是字符集编码问题了,只有字符集编码问题才会导致中文乱码了,这是我总结了所有在php开发中看到中文乱码问题的根本原因了,下面我整理了一些关于php中文乱码问题解决办法与例子,希望能解决各位的朋友.

1.mysql+php中文乱码

出现这种问题是数据库连接与网页编码不统一导致了.

解决办法,在mysql 连接时我们在后面设置一句:mysql_query("SET NAMES GBK");

例子,在连接数据库的语句中,代码如下:

  1. mysql_connect('localhost','user','password');
  2. mysql_select_db('my_db');
  3. mysql_query("set names 'utf8'"); //select 数据库之后加多这一句

2.PHP中文文件名输出乱码

出现文名乱码是我们环境不支持中文所导致了或编码问题我们只要进行转换字符编码为uft8即可,代码如下:

  1. $file_name="我的文件.jpg";
  2. $file_name=iconv("utf-8","gb2312",$file_name); //解决中文乱码问题
  3. echo '$file_name';

3.json_encode中文乱码问题

1.json_encode UTF8码中文后的字符串不可阅读

2.json_encode 多级数组中文乱码问题

3.json_encode 数组中包含换行时错误问题

4.json_encode 数组中键为中文的问题

实例代码如下:

  1. function _encode($arr)
  2. {
  3. $na = array();
  4. foreach ( $arr as $k => $value ) {
  5. $na[_urlencode($k)] = _urlencode ($value);
  6. }
  7. return addcslashes(urldecode(json_encode($na)),"rn");
  8. }
  9. function _urlencode($elem)
  10. {
  11. if(is_array($elem)){
  12. foreach($elem as $k=>$v){
  13. $na[_urlencode($k)] = _urlencode($v);
  14. }
  15. return $na;
  16. }
  17. return urlencode($elem);
  18. }

3.HTML内容编码

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />,这里我们指定了浏览器在解析HTML时使用UTF-8编码 。如果这里没有指定,浏览器会使用自己缺省的编码。不同的浏览器缺省编码会有所不同,比如IE6是GB2312,FireFox是UTF-8。所以,上面这段代码如果没有,在FireFox会显示正常,在IE6就会显示乱码。

4.php内容乱码

在php中我们只要在文件头加上,代码如下:

<?php header("Content-type:text/html;charset=utf-8");?>

5.url中文乱码的兼容性

在url地址里出现中文参数,接收页面出现乱码,这个是经常遇到的问题.

最基本的解决办法是链接里加上urlencode,接收页面会自动解码或者加上urldecode,但是有时候链接来自多个地方,有的意见urlencode了,有点没有,比如在谷歌浏览器(chrome)地址栏里敲入中文,传递的过程浏览器会自动给你编码,而IE核心缺不然.

这就导致同一个接收页面在谷歌浏览器里可以正常显示,而在IE浏览器则是乱码.

解决方法,代码如下:

  1. $keyboard2 = iconv("gb2312","UTF-8",$keyboard);
  2. if($keyboard2)
  3. $keyboard=$keyboard2;

6.htmlentities汉字中文乱码

htmlentities函数作用在汉字变量中的时候会出现乱码

$resultsText = str_replace("[QUERY]", htmlentities($(www.phpfensi.com)query), $resultsText);

正确的做法是改变htmlentities的默认参数:htmlentities($query,ENT_COMPAT,'UTF-8')

7.PHP下载文件名中的中文乱码,代码如下:

$filename = "中文 文件名.txt";

$encoded_filename = urlencode($filename);

$encoded_filename = str_replace("+", "%20", $encoded_filename);