ホームページ  >  記事  >  バックエンド開発  >  PHPのiconvが中国語文字化けした場合の対処法

PHPのiconvが中国語文字化けした場合の対処法

藏色散人
藏色散人オリジナル
2020-08-29 10:09:034560ブラウズ

php iconv 中国語の文字化けの解決策: まず libiconv 関数ライブラリをダウンロードして libiconv をインストールし、次に php を再コンパイルし、最後に変換する必要があるエンコーディングの後にパラメータ「//IGNORE」を追加します。

PHPのiconvが中国語文字化けした場合の対処法

推奨: 「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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。