PHP也有万恶的中文乱码,解决方法

汉字乱码真是一个悲催的事情,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();
时间: 2024-09-19 09:01:33

PHP也有万恶的中文乱码,解决方法的相关文章

Jsp---cookie中文乱码解决方法

//写cookie <form method="Get"> 姓名: <input type="text" name="name" /> <br /> <input type="submit" value="确定" /> </form> <!-- 写入cookie到客户端 --> <% if (request.getParamete

win7下zend studio5.5中文乱码解决方法

win7下zend studio5.5中文乱码解决方法 1.打开 C:Documents and SettingsAdministratorZDEconfig_5.5desktop_options.xml(这个地址要根据自己的电脑而定.) 2.查找 editing.encoding 3.修改里面为 <encoding name=”UTF-8″/> 4.保存,并将该文件属性设置为只读,否则zend每次启动都会将 desktop_options.xml 初始化 5.重启 zend 注意,你现在打开

SpringMVC中使用@ResponseBody注解返回值,Ajax取得中文乱码解决方法

Spring使用AnnotationMethodHandlerAdapter的handleResponseBody方法, AnnotationMethodHandlerAdapter使用request header中"Accept"的值和messageConverter支持的MediaType进行匹配,然后会用"Accept"的第一个值写入 response的"Content-Type".一般的请求都是通过浏览器进行的,request heade

PHP json_encode中文乱码解决方法

<?php /** * [PHP json_encode中文乱码解决方法] * 这里说的"中文乱码"其实不是不是真的乱码,而是在最后的json结果中显示下面的字串: * {"name":"\u4e2d\u6587\u5b57\u7b26\u4e32″,"value":"test"} * * [解决办法] * 在使用json_encode之前把字符用函数urlencode()处理一下,然后再json_encode

java中文乱码解决方法汇总

publicstaticvoidmain(String[]argv){ try{ System.out.println("中文");//1 System.out.println("中文".getBytes());//2 System.out.println("中文".getBytes("GB2312″));//3 System.out.println("中文".getBytes("ISO8859_1″));

unity3d 中文乱码解决方法&mdash;&mdash;cs代码文件格式批量转化UTF8

在Unity3d中经常会碰到中文乱码的问题,比如代码中的[AddComponentMenu("GameDef/AI/战机AI")],注释,中文文本等等 其原因在于,unity本身是不顾及地区的,所以默认全部为unicode编码,造成中文乱码 解决方法很多,比如, 一个一个文件用文本工具转成utf8格式 修改unity3d文件模板 第一种方法,在数量少的时候可行,数量多的时候就比较耗时和重复 第二种方法在项目前期做好的话非常有效,但是如果之前没这么处理就就没什么用了,而且一旦unity版

Qt5中文乱码解决方法

一. setWindowTitle(QStringLiteral("我是中文")); 二. QTextCodec *codec = QTextCodec::codecForName("GB18030"); setWindowTitle(codec->toUnicode("我是中文")); Qt5中文乱码解决方法

Zxing中文乱码解决方法

Zxing中文乱码解决方法总结 尝试过很多方法  最后发现此方法解决的乱码最多....... 在百度搜索二维码图片 经过前2页的测试  除开一张图之外  其余都能扫描出结果 如果大家有更好的解决方法 请联系我 谢谢 解决方法如下: 首先使用反射的方法判断扫描结果 是不是ISO8859-1的编码格式 如果是    ISO8859-1  编码格式就将扫描结果转换成GB2312 如果不是ISO8859-1 编码就直接显示......希望大家补充 我写了一个工具类 /** * 中文乱码 * * 暂时解决

[转]mysql导入导出数据中文乱码解决方法小结

本文章总结了mysql导入导出数据中文乱码解决方法,出现中文乱码一般情况是导入导入时编码的设置问题,我们只要把编码调整一致即可解决此方法,下面是搜索到的一些方法总结,方便需要的朋友. linux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqldump的时候需要加上--default-character-set=utf8, 例如下面的代码: 代码如下: mys

jquery的ajax()函数传值中文乱码解决方法介绍

前台 jQuery.post("/MailTemplate/SaveMailTemplate?Code=" + item.Code + "&DisplayName=" +encodeURI   (item.DisplayName) + "&Body=" +encodeURI(item.Body), {}, function (data) {                                if (data == 'S