2013-07-26 2 views
1

Скачивание проблем с файлом, в котором у filename &.Escaping & in filename for PHP загрузить

Например, файл 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; 

Спасибо за любую помощь

+0

вы попытались бежать из & в Ури по кодировке URL? –

ответ

3

Если память мне , & сбрасывается путем замены% 26 любой функцией кодирования url. Попробуйте использовать это:

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

В противном случае все после того, как «&» рассматривается как 2-й аргумент в методе GET.

+0

Работал отлично, спасибо. отмечен как ответ из-за полезного% 26. Я использовал% 20, чтобы избежать ошибки w3c для пустого тега действия, я думаю, так будет полезно. Благодарю. – user2608855

0

Вы можете использовать функцию urlencode() поставляемый PHP:

urlencode($url); 
+0

Работал отлично, спасибо! – user2608855