我试图下载一个文件名中包含特殊字符的php文件 . 不幸的是,这些字符被“_”代替 .
代码:
$filename = trim('<>$%&/=?' . '.txt');
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
header("Cache-Control: public");
header("Content-Type: application/text");
header("Content-Transfer-Encoding: Binary");
header('Content-Disposition: attachment; '
. sprintf('filename="%s"; ', urlencode($filename))
. sprintf("filename*=utf-8''%s", urlencode($filename)));
echo "file contents";
die();
返回一个名为的文件
"__$%&_=_.txt"
该文件的编码是UTF-8 .
Sprintf()似乎不是问题所在:
header("Content-Disposition: attachment; filename*=utf-8''" . rawurlencode($filename));
要么
header("Content-Disposition: attachment; filename=\"" . $filename . "\"");
给出相同的结果 .