处理标题:文件名中的特殊字符

我试图用文件名中包含特殊字符的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,“UTF-8”)尝试过不同的变体。 已存在的问题Content-Disposition中的特殊字符文件名,如何在HTTP中对Content-Disposition标头的filename参数进行编码? 和PHP:RFC-2231如何将UTF-8字符串编码为Content-Disposition文件名并没有真正帮助我。 你有什么进一步的想法?

该文件的编码是UTF-8。

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

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

要么

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

给出相同的结果。

链接地址: http://www.djcxy.com/p/22169.html

上一篇: Disposition header: Specialcharacters in the filename

下一篇: Azure blobs on Cloudberry not accepting content