其他提示

规格基本上不允许除US-ASCII之外的任何其他内容。 HTTP标头是US-ASCII。 HTTP的有效负载默认为ISO 8859-1,但它指的是内容正文,而不是标题。

可以说正确的事情是使用MIME的技术在头文件中编码非ASCII数据,如 RFC 2047 ,但我不知道浏览器是否真的支持它。

编辑:哎呀,不,RFC 2047第5节明确规定在Content-Disposition中不允许使用编码形式。看起来你运气不好 - 没有标准。

编辑2:有一个标准 - RFC 2231 定义了现在应该如何工作。它得到了一些浏览器的支持,但IE不支持。我找到了一些测试用例,它们演示了它的工作原理以及浏览器支持的内容。可用。

对于问题#2,您需要对Internet Explorer和Firefox的文件名进行URL编码。唯一的区别是您需要在Firefox中使用RFC 2231的格式。 这适用于Firefox 3和Internet Explorer 7.

在您上面的链接中,e1 ba a3是所提及字符的UTF-8编码,而不是字符代码。

回答问题#2:

由于您发现一个浏览器中的命名方案在另一个浏览器中不起作用,因此您唯一的解决方案是针对每个浏览器执行不同的操作,类似于示例这里

如果链接消失,解决方案基本上是:

1. If browser is IE URL encode filename
2. Generate Content-disposition header

当然,用户代理确定浏览器是否是IE浏览器(这是你能做到的唯一方法),充满了各种常见的危险。

正如这听起来像北美中心一样,如果在大量浏览器中这项工作很重要,你无法控制哪些用户代理被阻止或修改,那么只需避免使用UTF-8编码的字符。文件名并始终使用“下载”什么的。

不幸的是,目前没有一种方法适用于所有用户代理。

请参阅 http://greenbytes.de/tech/tc2231/ 了解测试用例,然后抱怨微软,谷歌和苹果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top