用于下载文件名中包含分号的文件的标题

时间:2011-06-18 19:20:48

标签: php file header download filenames

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

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

例如,

如果文件名为XYZ.zip

,代码将成功 如果文件名为aaaX; Y.zip(读为 aaax [分号] Y [dot] 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']));
?>

2 个答案:

答案 0 :(得分:4)

使用urlencode(),如下所示:

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

有关详细信息,请参阅RFC 2231

答案 1 :(得分:2)

试试这个

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