php によって生成される文字化けしたファイル名の解決策: 1. すべての数字を " " に置き換えます; 2. "header("Content-type: application/vnd.ms-excel");"; を追加します。 3. 、 「filename=xxx」の両隣のスペースを削除してください。
この記事の動作環境: Windows 7 システム、PHP バージョン 7.1、DELL G3 コンピューター
PHP エクスポートが文字化けする問題の解決方法ファイル名
問題のシナリオ:
統計データは、excel 関数をどこでも追加する必要があるため、composer を使用して phpspreadsheet コンポーネントをインストールし、データを作成してエクスポートします。 ASCII 名前のファイル名が存在する場合は、すべてが正常にエクスポートされますが、中国語のファイル名が存在する場合、エクスポートされたファイル名が文字化けします。
ソリューションはここに直接掲載されています:
1. ファイル名の処理
PHP の urlencode 関数はさまざまな空白文字を処理するため、は数値にトランスコードされます。この数値は Chrome でも Firefox でもエスケープされません。
したがって、ここではすべての数値が
$file_name = '导出文件.xls'; // 这是原本要导出的文件名 $encoded_filename = url_encode($file_name);// 将文件名进行urlencode转码 $encoded_filename = str_replace('+', '%20', $encoded_filename);
2 に再度置き換えられます。ヘッダー ファイル: ファイル タイプ宣言
エクスポートがファイルであり、特定の Excel タイプではない場合は、ファイル ヘッダー No.1 を使用します。
Excel 形式テーブルの下に xls をエクスポートしたため、次を使用しています。ファイル ヘッダー No.2
// 文件头No.1: 告诉浏览器这里要有一个文件流输出 header("Content-type: application/octet-stream"); // 文件头No.2: 告诉浏览器这里要输出一个excel文件 header("Content-type: application/vnd.ms-excel");
ヘッダー ファイル: ダウンロード ファイル名宣言
このステップが重要です。2 つの要件があります。注意事項
filename=xxx または filename*=xxx です。等号の両側にスペースはありません
filename*=xxx この設定項目は実際には 3 つの部分、つまり文字セット (utf8)、 language (空) と URL コード化されたファイル名。 language は一重引用符で囲まれた空の文字列で、3 つの部分の間にスペースがあってはなりません。
header('Content-Disposition: attachment; filename="foo-%c3%a4.xls"; filename*=UTF-8\'\'foo-%c3%a4.xls');
上記のコードを使用して chrome、firefox、360、ie11 をテストしましたが、すべて正常に動作しました。あなたにも役立つことを願っています。
[推奨学習: PHP ビデオ チュートリアル ]
以上がPHPで生成されるファイル名が文字化けする問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。