php iconv 中国語の文字化けの解決策: まず libiconv 関数ライブラリをダウンロードして libiconv をインストールし、次に php を再コンパイルし、最後に変換する必要があるエンコーディングの後にパラメータ「//IGNORE」を追加します。
推奨: 「PHP ビデオ チュートリアル 」
PHP で iconv 関数を使用して問題を解決する方法中国語の文字化け
iconv 関数ライブラリは、さまざまな文字セット間の変換を完了することができ、PHP プログラミングには欠かせない基本的な関数ライブラリです。
1. libiconv 関数ライブラリ libiconv-1.x.tar.gz をダウンロードします;
2. tar -zxvf libiconv-1.x.tar.gz を解凍します;
3. libiconv をインストールします
#configure --prefix=/usr/local/iconv #make #make install
4. PHP を再コンパイルし、コンパイル パラメーターを追加します --with-iconv=/usr/local/iconv
Windows 上で
iconv 関数は、キャプチャされた utf-8 でエンコードされたページを gb2312 に変換します。iconv 関数を使用してキャプチャされたデータをトランスコードするだけでは、理由もなくデータが少なくなります。
これは iconv 関数のバグです。 iconv は、文字 "—" を gb2312 に変換するときにエラーを起こします。解決策は非常に簡単で、変換する必要があるエンコーディングの後に "//IGNORE" を追加します。これは、iconv 関数の 2 番目のパラメータです。以下:
以下は引用内容です:
iconv("UTF-8","GB2312//IGNORE",$data)
ignore は、変換中のエラーを無視することを意味します。ignore パラメータがないと、この文字に続くすべての文字列は保存できません。
iconv は php のデフォルトの機能ではなく、デフォルトでインストールされるモジュールでもあります。使用する前にインストールする必要があります。
Windows2000 php の場合は、php.ini ファイルを変更して、extension=php_iconv.dll の前の「;」を削除します。同時に、元の php の下に iconv.dll をコピーする必要があります。インストール ファイルを winnt/system32 の下にコピーします (DLL がこのディレクトリを指している場合)
Linux 環境 では、静的インストールを使用し、構成時に追加項目 --with-iconv を追加します。それを実行すると、phpinfo から iconv の項目が確認できます。
簡単な使用例:
$zip = new ZipArchive();//打开文件 如果文件已经存在则覆盖,如果没有则创建 if($zip->open($destination,$overwrite?ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE)!==true){ return false; } //向压缩文件add the files foreach($valid_files as $file){ //$zip->addFile($file,$file); $file_info_arr= pathinfo($file); $filename =$file_info_arr['basename']; $filesss = iconv('UTF-8', 'GBK//IGNORE', $filename); $zip->addFile($file,$filesss); }
PHP の mb_convert_encoding 関数と iconv 関数の紹介
mb_convert_encoding この関数はエンコーディングを変換するために使用されます。以前はプログラムコーディングの概念が理解できませんでしたが、今では少し理解できるようになりました。
ただし、通常、英語にはエンコードの問題はありません。この問題が発生するのは中国語のデータだけです。たとえば、Zend Studio または Editplus を使用してプログラムを作成するときは、gbk エンコーディングを使用します。データをデータベースに入力する必要があり、データベース エンコーディングが utf8 である場合は、データをエンコードして変換する必要があります。データベースに入るときに文字化けします。
mb_convert_encoding の公式の使用法を参照してください:
http://cn.php.net/manual/zh/function.mb-convert-encoding.php
しかし、使用する必要があります 上記の機能をインストールする必要がありますが、最初に mbstring 拡張ライブラリを有効にする必要があります。
PHP の別の関数 iconv も文字列エンコーディングの変換に使用され、上記の関数と同様の機能があります。
以下に詳細な例をいくつか示します:
iconv — 文字列を要求された文字エンコーディングに変換します
(PHP 4 >= 4.0.5, PHP 5)
mb_convert_encoding — 文字エンコーディングの変換
(PHP 4 >= 4.0.6, PHP 5)
使用法:
string mb_convert_encoding ( string str, string to_encoding [, [mixed from_encoding] )
最初に mbstring 拡張ライブラリを有効にする必要があります。php.ini で、extension=php_mbstring.dll の前の ; を削除します
mb_convert_encoding では複数の入力エンコーディングを指定できます。内容に基づいて自動的に識別されますが、実行効率は iconv よりもはるかに劣ります;
string iconv (string in_charset, string out_charset, string str)
注: 2 番目のパラメータは使用できます。変換を指定するには、エンコーディングに加えて、//TRANSLIT と //IGNORE の 2 つのサフィックスを追加することもできます。 //TRANSLIT は、直接変換できない文字を 1 つ以上の近似文字に自動的に変換します。 //IGNORE は文字を無視します。変換できない文字であり、デフォルトの効果は最初の不正な文字から切り捨てられます。
変換された文字列を返すか、失敗した場合は FALSE を返します。
使用法: iconv が文字 "-" を gb2312 に変換するときにエラーが発生することがわかりました。無視パラメータがない場合、すべてこの文字に続く文字列は保存できません。この「—」はどうやってもうまく変換できず出力できません。また、mb_convert_encoding にはこのバグはありません。
通常は iconv を使用します。mb_convert_encoding 関数は、元のエンコーディングが特定できない場合、または変換後に iconv が正常に表示できない場合にのみ使用してください。
PHP で mb_convert_encoding トランスコーディングを使用する際の小さな落とし穴:
PHP プログラムで文字エンコーディングを変換するために mb_convert_encoding() メソッドを使用することは誰もがよく知っており、また大量に使用されます。そして一般に、この方法は十分にうまく機能し、賞賛に値します。しかし、プロジェクトで UTF8 を GBK に変換するためにこれを使用する必要があり、一部の特殊文字を変換するときに小さな問題が見つかりました。具体的には、mb が utf8 でエンコードできるが gbk でエンコードできない文字を \0x00\0x80 に変換するため、変換された gbk 文字で問題が発生します。
文字エンコードの変換プロセス中に、ターゲットのエンコードで表現できない文字に遭遇した場合、トランスコーディング プログラムが行うべきことは、そのような文字を破棄することです。このようにして、一部のデータは失われますが、 not トランスコーディングの原因となった文字シーケンスは利用できません。なぜ mb が上記のメソッドを破棄せずに使用する必要があるのかは不明です。
一時的な解決策は、トランスコードされた文字列シーケンスをフィルターしてすべての \x00\80 文字を除外するか、エスケープする前に utf8 文字列をフィルターして ut8 を除外することです。gbk で表現できないすべての文字を表します。実装の難易度としては、最初のフィルタリング方法の実装は比較的簡単です。
以上がPHPのiconvが中国語文字化けした場合の対処法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。