PHP Content-Disposition标头:文件名中的特殊字符

时间:2016-07-04 21:31:50

标签: php encoding http-headers

我正在尝试使用文件名中包含特殊字符的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"

我尝试过使用urlencode(),rawurlencode(),mb_convert_string($ filename,&#34; UTF-8&#34;)的不同变体。 已存在的问题Special Characters in Content-Disposition filenameHow to encode the filename parameter of Content-Disposition header in HTTP?PHP: RFC-2231 How to encode UTF-8 String as Content-Disposition filename对我没有帮助。 你有什么进一步的想法吗?

文件编码为UTF-8。

Sprintf()似乎不是问题所在:

header("Content-Disposition: attachment; filename*=utf-8''" . rawurlencode($filename)); 

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

给出相同的结果。

0 个答案:

没有答案