Firefox 在文件名中带有空格下载时出现问题

2022-08-30 21:36:49

似乎firefox在文件名中有空格用于下载的问题...

header( 'Content-Type: text/csv' );
header( 'Content-Disposition: attachment;filename='.$filename);
$fp = fopen('php://output', 'w');
fputs($fp, $csvdata);
fclose($fp);

下面是一个名为Test_ Grad Fair 2_20140129_1312_607.csv

当我尝试使用上面的代码与FireFox下载文件时,会发生以下情况。(主要问题是它删除了文件扩展名!

Download Image from Firefox

当我尝试从 Safari 或 Chrome 下载它时:

Downloading it from Safari

   

我知道一个解决方案可能是做这样的事情:

$filename = str_replace(' ', '', $filename);

但是,我更喜欢弄清楚为什么FireFox会遇到这个问题,在文件名中没有空格似乎有点荒谬。这会像一个空间问题而不是一个空间问题吗?%20


答案 1

文件名参数应括在双引号中。

header( 'Content-Disposition: attachment;filename="'.$filename.'"');

查看 http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download


答案 2

我在下载文件名包含空间的文件时遇到了一个小问题。我使用以下代码修复了此问题。我为CodeIgniter框架工作编写了这段代码。

    $file_name = 'Test Pdf.pdf'; //Your file name
    $original_file_name = 'Test Pdf.pdf'; //Your file name
    $file_name = str_replace(' ', '%20', $file_name);
    $file_url = asset_url("uploads/agent_logo/46/".$file_name);// Full file path including file name.
    ob_start();
    ob_end_clean();
    header('Content-Type: application/octet-stream');
    header('Content-Transfer-Encoding: Binary');
    header("Content-Disposition: attachment; filename=\"" . $original_file_name . "\"");
    readfile($file_url);

这将适用于所有类型的文件和所有浏览器,包括mozilla firefox和IE。


推荐