ホームページ  >  記事  >  バックエンド開発  >  PHPでCSV出力が文字化けした場合の対処法

PHPでCSV出力が文字化けした場合の対処法

藏色散人
藏色散人オリジナル
2021-03-01 17:59:432204ブラウズ

php 出力の csv 文字化けコードの解決策: まず、対応するコード ファイルを開き、次にファイルの先頭に BOM ヘッダーを出力し、CSV ファイルのエンコード方法を Windows に指示し、最後に Excel にCSV を開くときに正しいエンコードを行うことができます。

PHPでCSV出力が文字化けした場合の対処法

#この記事の動作環境: Windows 7 システム、PHP バージョン 7.1、Dell G3 コンピューター。

PHP から CSV ファイルをエクスポートする際の文字化けの解決策

プロジェクトを実行する際に外国語の使用に遭遇した場合、UTF-8 エンコードを使用します。ただし、PHPを使用してCSVファイルをエクスポートする場合、UTF-8エンコーディングを使用して書かれたデータが日本語や韓国語などの外国語である場合、文字化けが発生します。

PHP によって生成された CSV ファイルの文字化けの問題を解決するには、ファイルの先頭に BOM ヘッダーを出力し、Windows に CSV ファイルのエンコード方法を指示するだけで、Excel で正しいコードを使用できるようになります。 CSVを開くときのエンコーディング。

BOM

UCS エンコーディングには「ZERO WIDTH NO-BREAK SPACE」という文字があり、そのエンコーディングは FEFF です。 FFFE は UCS には存在しない文字ですので、実際の送信では出現しないはずです。 UCS 仕様では、バイト ストリームを送信する前に文字「ZERO WIDTH NO-BREAK SPACE」を送信することが推奨されています。このように、受信機が FEFF を受信した場合、バイト ストリームがビッグ エンディアンであることを示し、FFFE を受信した場合、バイト ストリームがリトル エンディアンであることを示します。したがって、

「ZERO WIDTH NO-BREAK SPACE」という文字は BOM とも呼ばれます。 UTF-8 では、バイト順序を示すために BOM は必要ありませんが、BOM を使用してエンコード方式を示すことができます。 「ZERO WIDTH NO-BREAK SPACE」という文字の UTF-8 エンコーディングは EF BB BF です。したがって、受信側が EF BB BF で始まるバイト ストリームを受信すると、それが UTF-8 でエンコードされていることを認識します。 Windows は、BOM を使用してテキスト ファイルのエンコーディングをマークします。

[推奨学習: 「PHP ビデオ チュートリアル 」]

すべてのコンテンツが出力される前に

print(chr(0xEF).chr(0xBB).chr(0xBF));

いくつかの UTF エンコードされた BOM ヘッダー

  define ('UTF32_BIG_ENDIAN_BOM'   ,   chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));
   define ('UTF32_LITTLE_ENDIAN_BOM',   chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));
   define ('UTF16_BIG_ENDIAN_BOM' ,   chr(0xFE) . chr(0xFF));
   define ('UTF16_LITTLE_ENDIAN_BOM',   chr(0xFF) . chr(0xFE));
   define ('UTF8_BOM'   ,   chr(0xEF) . chr(0xBB) . chr(0xBF));

完全なコード

header('Expires: 0');
     header('Cache-control: private');
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
     header('Content-Description: File Transfer');
     header('Content-Encoding: UTF-8');
     header('Content-type: text/csv; charset=UTF-8');
     header('Content-Disposition: attachment;            filename=Customers_Export.csv');

echo "\xEF\xBB\xBF"; // UTF-8 BOM
// print(chr(0xEF).chr(0xBB).chr(0xBF));

以上がPHPでCSV出力が文字化けした場合の対処法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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