【问题标题】:Firefox has problems when downloading with a space in filenameFirefox 下载时文件名中有空格时出现问题
【发布时间】:2014-02-21 22:53:33
【问题描述】:

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 下载文件时,会发生以下情况。 (主要问题是它删除了文件扩展名!)

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

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

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

但是,我更愿意弄清楚为什么 FireFox 会出现这个问题,文件名中不能有空格似乎有点荒谬。这会不会像 %20 而不是空间问题?

【问题讨论】:

  • 要在线托管的文件名中的空格通常是一个坏主意。重命名文件比等待 Firefox 没有这个问题要容易得多。
  • 您是否真的尝试过%20+?还是urlencode()
  • @ElendilTheTall 如果我的客户上传了一个文件并想使用原始文件名下载它确实是最好的选择。如果有解决办法,这样的技术问题给我的网站用户带来不便,真的很奇怪。

标签: php firefox filenames


【解决方案1】:

我在下载文件名包含空间的文件时遇到了一个小问题。 我使用以下代码解决了这个问题。 我为 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

【讨论】:

    【解决方案2】:

    文件名参数应该用双引号括起来。

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

    http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download

    【讨论】:

    • 今天仍然有帮助! kkk
    • 你太棒了,真的救了我一天。 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2019-11-26
    • 1970-01-01
    • 2021-04-07
    • 2021-02-18
    • 2013-11-23
    • 2013-08-11
    相关资源
    最近更新 更多