相关疑难解决方法(0)

Content-Disposition文件名中的特殊字符

此线程是如何在HTTP中编码Content-Disposition标头的filename参数的副本 但是,由于很久以前就提出这个问题并且仍然没有令人满意的答案(在我看来),我想再问一次.

我开发了一个C++ CGI应用程序,它可以提供名称中包含特殊字符的文件,例如
" weird#€= {}; filename.txt "

似乎没有可能以适合每个浏览器的方式设置HTTP Content-Dispostion

  • IE浏览器
  • 火狐
  • 歌剧
  • 苹果浏览器

我会为每个浏览器提供不同的解决方案.
现在我走了多远:

Internet Explorer(添加双引号并替换#和;)

Content-Disposition: attachment; filename="weird %23 € = { } %3B filename.txt"
Run Code Online (Sandbox Code Playgroud)

Firefox(双引号似乎工作.没有更多事情要做):

Content-Disposition: attachment; filename="weird # € = { } ; filename.txt"
Run Code Online (Sandbox Code Playgroud)

另一种工作方式:

Content-Disposition: attachment; filename*=UTF-8''weird%20%23%20%e2%82%ac%20%3D%20%7B%20%7D%20%3B%20filename.txt
Run Code Online (Sandbox Code Playgroud)

当只使用双引号时会出现这些问题:

  • =文件名中的消失
  • €将被 - 取代 -

但这有效:

Content-Disposition: attachment; filename*=UTF-8''weird%20%23%20%e2%82%ac%20%3D%20%7B%20%7D%20%3B%20filename.txt
Run Code Online (Sandbox Code Playgroud)

歌剧

使用duoble引号或使用语法:filename*= UTF-8''...会产生以下问题:

  • 文件名中多个粘贴在一起的空格减少为一个
  • {和} disapear:" ab {} cd.txt " - >" abcd.txt "
  • 文件名被删除后; 在其中:" abc; def.txt " …

c++ browser cgi content-disposition http-headers

30
推荐指数
1
解决办法
2万
查看次数

标签 统计

browser ×1

c++ ×1

cgi ×1

content-disposition ×1

http-headers ×1