ホームページ  >  記事  >  バックエンド開発  >  PHPで生成されるファイル名が文字化けする問題を解決する方法

PHPで生成されるファイル名が文字化けする問題を解決する方法

藏色散人
藏色散人オリジナル
2021-04-02 09:07:522394ブラウズ

php によって生成される文字化けしたファイル名の解決策: 1. すべての数字を " " に置き換えます; 2. "header("Content-type: application/vnd.ms-excel");"; を追加します。 3. 、 「filename=xxx」の両隣のスペースを削除してください。

PHPで生成されるファイル名が文字化けする問題を解決する方法

この記事の動作環境: 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 サイトの他の関連記事を参照してください。

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