ホームページ >バックエンド開発 >PHPの問題 >utf8 でエンコードされた PHP でエクスポートされた CSV の文字化けを解決するにはどうすればよいですか?

utf8 でエンコードされた PHP でエクスポートされた CSV の文字化けを解決するにはどうすればよいですか?

青灯夜游
青灯夜游オリジナル
2020-08-17 10:43:034493ブラウズ

文字化けを解決する方法: 1. iconv 関数を使用して、utf8 エンコーディングを GBK にトランスコードします。構文 "$str = iconv('utf-8', 'GBK//IGNORE', $str));" ; 2. Excel が UTF-8 であることを自動的に認識できるように、コンテンツを出力する前に BOM ヘッダーを出力します。

utf8 でエンコードされた PHP でエクスポートされた CSV の文字化けを解決するにはどうすればよいですか?

推奨: 「PHP ビデオ チュートリアル

実際、要件はデータを次の場所にエクスポートすることです。 Excel は非常に有名です。もちろん、有名な PHPExcel ライブラリが思い浮かびます。このライブラリは非常に強力ですが、大量のメモリを消費し、データが 100,000 を超えるため、Web リクエストで完了するのは基本的に困難です。したがって、軽量の CSV をエクスポートするには、依然としてネイティブ PHP を使用する必要があります。

通常の状況では、UTF-8 でエンコードされた通常のコンテンツを CSV にエクスポートすると、一部の非主流の文字や絵文字表現はもちろん、Excel で開くと文字化けします。コードが文字化けする理由は、Windows システムではデフォルトの Excel が GBK エンコードを使用して解析されるためです。現在、UTF-8 を使用するエンコードは存在しませんが、大企業の有名製品ではトラフィックを節約するために GBK などのエンコード バージョンが作成されており、一般的には UTF-8 を使用します。

文字化けの問題を解決するには、PHP では iconv 関数を使用して GBK にトランスコードするのが一般的です。これにより、デフォルトで Excel を開くときに問題がなくなります。ただし、絵文字表現などの主流の文字については、GBK では表示できず、トランスコードに失敗すると文字が空白になります。 //IGNORE タグを追加してこれらを無視すると、これらの文字は無視され、他の通常の文字は保持されます。

$str = iconv('utf-8', 'GBK//IGNORE', $str));

これは妥協とも言えます。トランスコーディングせずに UTF-8 を直接出力できますか? Excel は自動的に UTF-8 を認識し、UTF-8 を使用してデコードして表示するのではないでしょうか?実際には可能ですが、BOM ヘッダーが必要です (Windows 以外の世界ではそのようなものはありません)。この BOM ヘッダーがあれば、UTF-8 であることが認識できます。そうでない場合は、認識して使用できません。デフォルトの GBK がそれを処理します。いわゆる BOM ヘッダーを正しく出力する方法、コードを見てください:

$fp = fopen('./test_csv.csv', 'a');
fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF));//输出BOM头
fputcsv($fp, ['标题']);
fputcsv($fp, ['解决乱码']);
fclose($fp);

上記の個人的なテストでは、いわゆる文字化けと、絵文字表現などの非主流の文字の正常な表示を解決できます。

以上がutf8 でエンコードされた PHP でエクスポートされた CSV の文字化けを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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