【问题标题】:Header to download file that contains semicolon in its filename用于下载文件名中包含分号的文件的标头
【发布时间】:2011-06-18 19:20:47
【问题描述】:

我已经有一个 PHP 代码来强制用户下载文件, 代码运行良好

问题是,当用户想要下载文件名中包含分号的文件时

例如 如果文件名为 XYZ.zip

,则代码将成功

但如果文件名 aaaX;Y.zip(读作 aaax [分号] Y [点] zip)不会成功 当用户下载时,文件名变成aaaX

第一个分号被删去

<?php

$a=basename($_GET['fn']);
$sizepath =filesize(base64_decode($_GET['path']));

header('Content-Type: application/octet-stream');
header("Content-Disposition: attachment; filename=".$a); 
header('Cache-control: private, must-revalidate');
header('Content-Transfer-Encoding: binary');
// load the file to send:

readfile(base64_decode($_GET['path']));
?>

【问题讨论】:

    标签: php file header download filenames


    【解决方案1】:

    使用urlencode(),像这样:

    header("Content-Disposition: attachment; filename*=us-ascii'en-us'".urlencode($a));
    

    更多信息请参见RFC 2231

    【讨论】:

    • 谢谢伙伴..但是如果文件名有'(引号)怎么办?我已经尝试过您的代码,它在我之前的问题中有效
    • urlencode() 函数对引号进行编码,所以它们应该没问题。
    • @Igor - 实际上,您的方式也是正确的。但是,我没有使用任何一种方法来获得双引号,至少在我的 Mac 上的 Chrome 中没有......
    【解决方案2】:

    试试这个

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

    【讨论】:

      猜你喜欢
      • 2019-07-06
      • 2010-12-07
      • 1970-01-01
      • 2012-04-03
      • 2012-11-10
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多