逃避&在PHP下载的文件名中

时间:2013-07-26 17:17:04

标签: php html escaping download

下载文件名所在的文件问题&在它。

例如,名为bla的文件将下载正常但bla& Blaaaaa找不到该文件。

有没有办法让我逃脱&?我无法重命名服务器上的文件,这会更容易但不可能。

文件存储在数据库中,然后检索并修剪其独特的附属物。 :)

$fileName = $eachFile['filename'];
$fileNamePretty = explode('__', $fileName); // ONLY FILENAME

然后在我的下载链接中:

        <a href="../download.php?filename=<?php echo $fileName?>">

和download.php

<?php
require 'core/init.php';
$filename = $_GET['filename'];
$dir = "training/trainingDocuments/";
$downloadFilename = $dir.$filename;

//8 - SUBSEA QUESTIONS__51f034ab37a8e.xls
//if the filename exists
if(is_file($downloadFilename)){

//send the headers
header('Pragma: public'); //FIX IE6 Content-Disposition
header('Content-Description: File Transfer');
header('Content-Transder-Encoding: binary');
header(sprintf('Content-Length: %u', filesize($downloadFilename)));
header('Content-type: application/octet-stream');
header("Content-Disposition: attachment; filename=".$downloadFilename."");

readfile($downloadFilename);

$training->addToDownload($filename);//updates download count

}else{
//file doesn't exist
echo "File no exist\n\n";
echo $downloadFilename;

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

如果记忆对我有用,&amp;通过任何url编码函数替换为%26来转义。试试这个:

<a href="../download.php?filename=<?php echo urlencode($fileName); ?>">

否则'&amp;'之后的所有内容被认为是get方法中的第二个参数。

答案 1 :(得分:0)

您可以使用PHP提供的urlencode()函数:

urlencode($url);