此线程是如何在HTTP中编码Content-Disposition标头的filename参数的副本? 但是,由于很久以前就提出这个问题并且仍然没有令人满意的答案(在我看来),我想再问一次.
我开发了一个C++ CGI应用程序,它可以提供名称中包含特殊字符的文件,例如
" weird#€= {}; filename.txt "
似乎没有可能以适合每个浏览器的方式设置HTTP Content-Dispostion
我会为每个浏览器提供不同的解决方案.
现在我走了多远:
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''...会产生以下问题: