PHP中文乱码解决方案


Posted in PHP onMarch 05, 2015

汉字乱码真是一个悲催的事情,JAVA讨厌汉字,PHP也不喜欢汉字;

    Java乱码最终使用了spring给出的过滤器来过滤,处处过滤,其实影响了速度,不过没有办法,汉字就是W国首先不考虑的事情;

    想不到PHP也是乱码处处在,当你使用亲兄弟MySQL的时候,汉字显得那么亲切,从未考虑过他会变成天书;不过为了和其他其他交互,把PHP的手伸到SQL SERVER的时候,乱码来了,原因是第三方系统用的GBK编码;

    哎,转换吧;

   1,PHP自带的转换函数ICONV,一个高大上的函数;

string iconv ( string $in_charset , string $out_charset , string $str )

   使用DEMO:

<?php

$text = "This is the Euro symbol '?'.";

echo 'Original : ', $text, PHP_EOL;

echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;

echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;

echo 'Plain    : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;

?>

   大家都推荐的函数,不过使用之后无法转换,没有错误,字符也没有转换,NO!

  2,另辟蹊径,还有一个大家质疑效率不高的函数,不过无论如何,先实现再考虑其他三

//检查该函数是否可用

echo function_exists('mb_convert_encoding');

//检测当前编码

echo mb_detect_encoding($val, "GBK, GB2312, UTF-8");

//转换编码,把CP936(就是GBK)转换成UTF-8

$v=mb_convert_encoding ($val, "UTF-8", "CP936");

结果成功了;

  好吧,先用着吧,为了转换数据库查询的结果集,制作一个转换函数:

  1,函数“乱码克星”:

// $fContents 字符串

// $from 字符串的编码

// $to 要转换的编码

function auto_charset($fContents,$from='gbk',$to='utf-8'){

    $from   =  strtoupper($from)=='UTF8'? 'utf-8':$from;

    $to       =  strtoupper($to)=='UTF8'? 'utf-8':$to;

    if( strtoupper($from) === strtoupper($to) || empty($fContents) || (is_scalar($fContents) && !is_string($fContents)) ){

        //如果编码相同或者非字符串标量则不转换

        return $fContents;

    }

    if(is_string($fContents) ) {

        if(function_exists('mb_convert_encoding')){

            return mb_convert_encoding ($fContents, $to, $from);

        }else{

            return $fContents;

        }

    }

    elseif(is_array($fContents)){

        foreach ( $fContents as $key => $val ) {

            $_key =     auto_charset($key,$from,$to);

            $fContents[$_key] = auto_charset($val,$from,$to);

            if($key != $_key )

                unset($fContents[$key]);

        }

        return $fContents;

    }

    else{

        return $fContents;

    }

}

2,使用:

//打印输出查询结果(假设你的结果)

$arr=array();

while($list=mssql_fetch_row($row))

{

    $arr[]=$list;

}

$s=auto_charset($arr,'gbk','utf-8');

//打印试试,在浏览器设置编码为UFT-8,看没有乱码

print_r($s);die();

以上所述就是本文关于php中文乱码的介绍了,希望大家能够喜欢。

PHP 相关文章推荐
将php数组输出html表格的方法
Feb 24 PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 PHP
深入分析PHP引用(&amp;)
Sep 04 PHP
php实现的农历算法实例
Aug 11 PHP
php面向对象编程self和static的区别
May 08 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
PHP自定义函数实现格式化秒的方法
Sep 14 PHP
php compact 通过变量创建数组
Nov 15 PHP
php 实现Hash表功能实例详解
Nov 29 PHP
PHP中大括号'{}'用法实例总结
Feb 08 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
Jun 10 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
php判断输入是否是纯数字,英文,汉字的方法
Mar 05 #PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 #PHP
PHP获取QQ达人QQ信息的方法
Mar 05 #PHP
PHP访问Google Search API的方法
Mar 05 #PHP
PHP使用PDO连接ACCESS数据库
Mar 05 #PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
Mar 05 #PHP
PHP解析RSS的方法
Mar 05 #PHP
You might like
PHP+APACHE实现用户论证的方法
2006/10/09 PHP
PHP内核探索之变量
2015/12/22 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
php数组分页实现方法
2016/04/30 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
python简单操作excle的方法
2018/09/12 Python
selenium+python设置爬虫代理IP的方法
2018/11/29 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
python实现简单日期工具类
2019/04/24 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
Perricone MD裴礼康美国官网:抗衰老护肤品
2016/09/26 全球购物
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
2014年六一儿童节演讲稿
2014/05/23 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL