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 相关文章推荐
Search Engine Friendly的URL设计
Oct 09 PHP
html中select语句读取mysql表中内容
Oct 09 PHP
傻瓜化配置PHP环境――Appserv
Dec 13 PHP
PHP中的正则表达式函数介绍
Feb 27 PHP
PHP中模拟处理HTTP PUT请求的例子
Jul 22 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
详解PHP中的PDO类
Jul 06 PHP
php实现复制移动文件的方法
Jul 29 PHP
在php7中MongoDB实现模糊查询的方法详解
May 03 PHP
详解PHP 二维数组排序保持键名不变
Mar 06 PHP
PHP判断一个变量是否为整数、正整数的方法示例
Sep 11 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
谈PHP生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
PHP实现合并discuz用户
2015/08/05 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
2016/05/21 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
PHP __call()方法实现委托示例
2019/05/20 PHP
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
DOM 事件流详解
2015/01/20 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
Python实现SVN的目录周期性备份实例
2015/07/17 Python
使用Python写个小监控
2016/01/27 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
妇科医生自荐信
2013/11/05 职场文书
户外婚礼策划方案
2014/02/08 职场文书
致800米运动员广播稿
2014/02/16 职场文书
英语感谢信范文
2015/01/20 职场文书
云台山导游词
2015/02/03 职场文书
青岛导游词
2015/02/12 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
感动中国何玥观后感
2015/06/02 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
Python集合set()使用的方法详解
2022/03/18 Python
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js
一文解答什么是MySQL的回表
2022/08/05 MySQL