文字化けを解決する方法: 1. iconv 関数を使用して、utf8 エンコーディングを GBK にトランスコードします。構文 "$str = iconv('utf-8', 'GBK//IGNORE', $str));" ; 2. Excel が UTF-8 であることを自動的に認識できるように、コンテンツを出力する前に BOM ヘッダーを出力します。
推奨: 「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 サイトの他の関連記事を参照してください。