gpt4 book ai didi

PHP 内容处置 header : Specialcharacters in the filename

转载 作者:行者123 更新时间:2023-12-05 07:48:48 24 4
gpt4 key购买 nike

我正在尝试使用文件名中包含特殊字符的 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") 的不同变体。已经存在的问题 Special Characters in Content-Disposition filename , How 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 . "\""); 

结果相同。

最佳答案

我相信,这个问题与文件名的编码无关( "Content-Disposition: attachment; filename*=utf-8''" . rawurlencode($filename) 选项似乎是正确的)。

一些字符如? , < , >只是not allowed在特定平台的文件名中并替换为 _通过浏览器。

此外,您可以同时拥有 filenamefilename* Content-Disposition 中的参数 header ,使用前者作为不支持扩展的客户端的后备 filename*参数。它可以通过 content-disposition 无缝完成图书馆。

关于PHP 内容处置 header : Specialcharacters in the filename,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38192466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com