ホームページ  >  記事  >  バックエンド開発  >  PHPでUTF-8でエンコードされたCSVファイルを生成し、Excelで開くと文字化けする問題を解決する方法

PHPでUTF-8でエンコードされたCSVファイルを生成し、Excelで開くと文字化けする問題を解決する方法

伊谢尔伦
伊谢尔伦オリジナル
2016-12-02 09:59:091260ブラウズ

理由: 出力された CSV ファイルに BOM がありません。

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でBOMを出力するには?

すべてを出力する前に

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

サンプルコード:

<?php
    function writeCsvToFile($file,array $data){
        $fp = fopen($file, &#39;w&#39;);
        //Windows下使用BOM来标记文本文件的编码方式
        fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF));
        foreach ($data as $line) {
            fputcsv($fp, $line);
        }
        fclose($fp);
    }


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