Php 下载文件名中包含分号的文件的头

Php 下载文件名中包含分号的文件的头,php,file,header,download,filenames,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('Cont

我已经有了一个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']));
?>
试试这个

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

header("Content-Disposition: attachment; filename=\"" . $a . "\"" );
使用urlencode,如下所示:

header("Content-Disposition: attachment; filename*=us-ascii'en-us'".urlencode($a));
有关更多信息,请参阅。

使用urlencode,如下所示:

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

有关更多信息,请参阅。

谢谢,伙计。但是如果文件名有引号,该怎么办?我已经试过你的代码了,在我之前的问题中它是有效的urlencode函数对引号进行编码,所以它们应该是正确的。@Igor-事实上,你的方法也是正确的。然而,我没有双引号来通过使用这两种方法,至少不是在我的Mac上的Chrome…谢谢朋友..但是如果文件名有“引号”怎么办?我已经试过你的代码了,在我之前的问题中它是有效的urlencode函数对引号进行编码,所以它们应该是正确的。@Igor-事实上,你的方法也是正确的。然而,我并没有双引号来通过使用这两种方法,至少不是在我的Mac上的Chrome。。。