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,別の道を切り開いて、効率の悪い関数がもう一つありますが、とりあえず実現して他の3つを考えます。

//
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中国語の文字化けについて紹介しました。お好きになってください。