php は、出力される CSV 形式ファイルに BOM がないため、CSV 文字化けを生成します。解決策は、BOM を使用して文字エンコーディングを示し、「header("Content-type:text」のようなコードを使用することです。 /csv;charset=gb2312"); "。
この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 パソコン
中国語文字化けの解決方法PHP 出力 csv ファイル内の中国語コード
PHP ダウンロード ファイルでは、バイト ストリーム出力がよく使用されます。したがって、CSV 形式をダウンロードするためによく使用されるコードは次のとおりです。
header("Content-Type: application/force-download"); header("Content-type:text/csv;charset=gb2312"); header("Content-Disposition:filename=打开邮件导出".date("YmdHis").".csv"); echo "收件人邮箱,收件人姓名,发送时间\r"; ob_end_flush(); foreach($list as $rs) { echo $rs->toemail.",".$rs->name.",".date('Y-m-d H:i:s',$rs->addtime)."\r"; flush(); } exit;
この方法でダウンロードした CSV ファイルをメモ帳やサブライム テキストなどのエディタで開くと通常は文字化けします。 Excel で開いた場合、出力される CSV 形式のファイルは BOM が存在しないため、BOM についてはさまざまな意見があります。通常、PHP では BOM を削除する必要がありますが、CSV ファイルには BOM マーキング文字エンコーディングを使用する必要があります。
解決策は次のとおりです:
header("Content-Type: application/force-download"); header("Content-type:text/csv;charset=gb2312"); header("Content-Disposition:filename=打开邮件导出".date("YmdHis").".csv"); echo chr(0xEF).chr(0xBB).chr(0xBF); echo "收件人邮箱,收件人姓名,发送时间\r"; ob_end_flush(); foreach($list as $rs) { echo $rs->toemail.",".$rs->name.",".date('Y-m-d H:i:s',$rs->addtime)."\r"; flush(); } exit;
Linux と Windows の改行の違いのため。上記のコードが Linux サーバーで悪い反応を示す場合は、「\r」を「\r\n」に変更できます。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHPでCSV文字化けが発生した場合の対処法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。