【问题标题】:why is a forward slash converted to a hyphen / dash为什么正斜杠转换为连字符/破折号
【发布时间】:2014-11-30 16:10:06
【问题描述】:

我知道我们应该替换正斜杠,例如分解路径并使用数组的最后一个元素作为文件名。

但是为什么使用时正斜杠会转换成连字符/破折号

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

$local_file 类似于/file

下载的文件名为-file

这种行为是否在某处进行了描述?

rfc 论文没有提到这一点,或者是这样吗? http://www.faqs.org/rfcs/rfc2183.html

【问题讨论】:

  • 因为标题应该有文件名,而不是路径。这就是为什么/ 在文件名中无效。
  • 在文件名中使用 / 是否好/安全?我认为不是因为每个客户可能会以不同的方式处理这个问题。

标签: php filenames slash content-disposition


【解决方案1】:

这是特定于客户的。大多数浏览器只会删除任何 path/ 前缀。但是对正斜杠进行转码也一样好。

在 RFC2616,http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html,第 19.5.1 节中有所提及

接收用户代理不应该尊重 filename-parm 参数中存在的任何目录路径信息,这是目前唯一被认为适用于 HTTP 实现的参数。文件名应仅被视为终端组件。
Network Working Group, R. Fielding et al, (c) The Internet Society (1999)

当然,出于安全原因,不应将 HTTP 负载提取到任何预定义的路径。

【讨论】:

  • 好的,有道理,但由于它是特定于客户的,它不是有点不准确,因为它可能因客户而异吗?我们不应该直接用下划线或破折号/连字符等所需字符替换斜杠吗?
  • 最新和具体的定义在rfc6266 btw,甚至推荐字符替换。它没有规定如何以及何时,因为不同平台的特殊字符构成存在差异。
  • 所以在 PHP 中直接替换这些斜线肯定比依赖客户端和平台更好。好的,感谢 rfc 的链接
  • RFC 2616 已过时。与 Content-Disposition 相关的是 greenbytes.de/tech/webdav/rfc6266.html
猜你喜欢
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 2010-12-07
相关资源
最近更新 更多