gpt4 book ai didi

PHP - HTTP header 中的文件名 : Problem with whitespaces

转载 作者:可可西里 更新时间:2023-11-01 13:06:27 25 4
gpt4 key购买 nike

使用 CakePHP 和 Java Web Start 我在 Controller 中生成必要的 .jnlp 文件,其中我将文件名设置为标题字段。只要我不尝试在文件名中使用特殊字符,它就可以正常工作。但是,我想在主要操作系统上启用每个可能的字符作为文件名。所以我尝试做的是通过用空字符串替换它们来删除所有无效字符。但是文件名中应该允许的空格似乎存在问题。

这是代码:

$panel_id = 1
$panelname = 'w h i t e s p a c e s';
$filename = sprintf('"Project_%d_%s.jnlp"', $panel_id, $panelname);
$invalid_chars = array('<', '>', '?', '"', ':', '|', '\\', '/', '*', '&');
$filename = str_replace($invalid_filenamechars, '', $filename);
$this->header('Content-Disposition: attachment; filename=' . $filename);

当我这样做时,标题中的结果文件名为“Project_1_w h i t e s p a c e”,而 Windows 7 想要将文件另存为“Project_1_w”。所以我的操作系统似乎不接受文件名中未转义的空格?如果不是因为以下原因,我会对这个解释感到满意:我离开了第 4 行和第 5 行,以便代码看起来

$panel_id = 1
$panelname = 'w h i t e s p a c e s';
$filename = sprintf('"Project_%d_%s.jnlp"', $panel_id, $panelname);
$this->header('Content-Disposition: attachment; filename=' . $filename);

现在 Windows 愿意保存包含所有空格的文件,但我仍然不明白为什么。如果我使用 wireshark 查看 header 中的文件名,两者都是相同的。如果 sprintf 行被 $filename = 'w h i t e s p a c e' 甚至 $filename = $panelname 替换,它会像第一个代码片段中那样剪切文件名。但我可以用 dottet-string-concat 语法替换 sprintf 并且它有效。

谁能告诉我,我忽略了什么?

最佳答案

区别在于双引号。使用第一个代码,您将得到:

Content-Disposition: attachment; filename=Project_1_w h i t e s p a c e s.jnlp

使用第二个代码,您将得到:

Content-Disposition: attachment; filename="Project_1_w h i t e s p a c e s.jnlp"

你可能想要的是这样的:

$panel_id = 1;
$panelname = 'w h i t e s p a c e s';
$filename = sprintf('"Project_%d_%s.jnlp"', $panel_id, $panelname);
$invalid_chars = array('<', '>', '?', '"', ':', '|', '\\', '/', '*', '&');
$filename = str_replace($invalid_filenamechars, '', $filename);
$this->header('Content-Disposition: attachment; filename="'.$filename.'"');

这会去除 $filename 中的所有双引号,但随后确保 $filename 始终被双引号括起来。

关于PHP - HTTP header 中的文件名 : Problem with whitespaces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7255628/

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