PHPにも悪質な中国語文字化けがある、その解決方法

WBOY
リリース: 2016-06-23 13:40:08
オリジナル
902 人が閲覧しました

中国語の文字化けは本当に悲しいことです。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;    }}
ログイン後にコピー

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート