私は(PHPで)開発している2つのサイトを持っています。彼らは同じコードを使用して (PEAR Excel を使用して) XLS エクスポートを提供しており、同じローカル サーバー上で実行されています。xls の実際のデータの問題を除外するために、今のところデータのないファイルを出力しています。
サイト A からエクスポートしてファイルを保存すると、Notepad++ 内でエンコードされた「ANSI」として報告されます。このファイルは Excel で正しく開きます。
サイト B からエクスポートすると、ファイルが「UTF-8」でエンコードされていると報告され、ファイルが Excel で開かれません。ファイルを Textpad++ で BOM なしの ANSI または UTF-8 に変換すると、Excel で問題なく開きます。
サイトの任意のページを保存すると、サイトAとサイトBで同じエンコーディングの違いが存在するため、Excelファイルがどのように生成されるかよりも基本的なものである可能性があると思います(CSV / ODS形式をエクスポートするときの同じエンコーディング)。エクスポート中にサイト A と B の http ヘッダーを比較しましたが、機能的には同じです。ヘッダーに Charset=ISO-8859-1 を明示的に追加しても違いはありません。Apache 仮想ホストは、サイト間で機能的にも同じです。どちらのサイトもデータベースで同じ文字エンコーディングを使用しています (ただし、現在データをエクスポートしていないため、これは関係ありません)。
私が説明していない他に何が原因でしょうか?
ありがとう!
アップデート
Excel 世代はニシンです。私はそれをすべて削除し、ダウンロード ヘッダーとテスト文字列を出力するだけにしました。保存すると、ファイルはサイト間で異なる方法でエンコードされます。ダウンロードファイルを生成するコードは、さまざまなファイルを比較すると同じように見えます...
単純化されたテスト ケースを作成しても、問題を再現できませんでした。私が試したところ、両方のサイトで ANSI として保存されたファイルが出力されました。他に何が起こっているのかわかりません。