PHP中国語の文字化けの解決案
漢字の文字化けは本当に悲しいことです。JAVAは漢字が嫌いです。PHPも漢字が嫌いです。
Java文字化は最終的にspringの提供するフィルタを使って濾過して、至る所濾過して、実はスピードに影響して、でも方法がなくて、漢字はW国のまず考慮しない事です。
PHPも文字化けがあちこちにあるとは思いませんでした。実の兄弟MySQLを使うと、漢字がとても親切に見えます。彼が天書になるとは考えられませんでした。しかし、他と対話するためにPHPの手をSQL SERVERに伸ばした時、文字化けが来ました。原因は第三者システム用のGBKコードです。
変換しましょう
1,PHPの持っている転換関数ICONVは、高い上の関数です。
2,別の道を切り開いて、効率の悪い関数がもう一つありますが、とりあえず実現して他の3つを考えます。
はい、とりあえず使ってください。データベース検索の結果集を変換するために、変換関数を作成します。
1,関数「文字化けし星」:
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中国語の文字化けについて紹介しました。お好きになってください。