ホームページ >バックエンド開発 >PHPチュートリアル >PHPにも悪質な中国語文字化けがある、その解決方法
中国語の文字化けは本当に悲しいことです。JAVA は中国語の文字を嫌います。PHP も中国語の文字を嫌います。
Java の文字化けは、実際のところどこでもフィルタリングによってフィルタリングされます。速度は問題ですが、W 国では漢字が第一に考慮されていません
私の兄弟である MySQL を使用すると、漢字が文字化けすることは予想外でした。とてもフレンドリーで、天国のような本になるとは思っていませんでしたが、他のユーザーと対話するために、PHP で SQL SERVER にアクセスしたところ、コードが文字化けしてしまいました。原因は、サードパーティ システムで使用されている GBK エンコーディングでした。 ;
変換しましょう;
1. PHP 独自の変換関数 ICONV、関数
string iconv ( string $in_charset , string $out_charset , string $str )
関数を使用します。誰もが推奨しているが、それはできない使用後に変換される、エラーはなく、文字も変換されない、いいえ!
2. 別の方法を見つけると、誰もが疑問に思う別の質問があります。これは非効率な関数ですが、いずれにせよ、最初に実装してください。次に、他の 3 つを検討してください
<?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;?>
結果は成功です。
では、まずそれを使用して、データベース クエリの結果セットを変換するために、変換関数を作成します。
1. 関数 "文字化け"バスター":
//检查该函数是否可用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");
2. 使用:
// $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; }}