Заголовок для загрузки файла, который содержит точку с запятой в своем имени файла - PullRequest
1 голос
/ 18 июня 2011

У меня уже есть код 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']));
?>

Ответы [ 2 ]

4 голосов
/ 18 июня 2011

Используйте urlencode(), например:

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

См. RFC 2231 для получения дополнительной информации.

2 голосов
/ 18 июня 2011

Попробуйте это

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