|
|
1
84
|
|
|
2
327
我知道这是一个古老的职位,但它仍然很相关。我发现现代浏览器支持Rfc5987,它允许UTF-8编码,百分比编码(URL编码)。然后na_ve file.txt变为:
Safari(5)不支持此功能。相反,您应该使用safari标准将文件名直接写入UTF-8编码的头文件:
IE8和更旧版本也不支持它,您需要使用UTF-8编码的IE标准,百分比编码:
在ASP.NET中,我使用以下代码:
我使用IE7、IE8、IE9、Chrome13、Opera11、FF5、Safari 5测试了上述功能。 更新 2013年11月: 这是我目前使用的代码。我仍然需要支持IE8,所以我无法摆脱第一部分。事实证明,Android上的浏览器使用内置的Android下载管理器,并且不能以标准方式可靠地解析文件名。
上述测试在IE7-11、Chrom32、Opera12、FF25、Safari6、Opera12、FF25、Safari6中进行,使用此文件名下载:160160229\160\\\160\\\\195;\195\195\195\195\195\\\\\\\160\\\\194;½_§!#¥%&()=`@_$,[]+_¨^ ~'-,;.txt 在IE7中,它适用于某些角色,但并非所有角色。但现在谁在乎IE7呢? 这是我用来为Android生成安全文件名的函数。请注意,我不知道Android支持哪些字符,但我已经测试过这些字符确实有效:
@汤兹:我在IE7和IE8中进行了测试,结果发现我不需要摆脱撇号(“)。你有失败的例子吗? @戴夫·范登埃因德:根据RFC6266的工作原理,将两个文件名合并在一行,除了Android和IE7+8,我已经更新了代码来反映这一点。谢谢你的建议。 @蒂洛:不知道GoodReader或任何其他非浏览器。使用Android方法可能会有一些运气。 @亚历克斯·朱可夫斯基:我不知道为什么,但正如上面所讨论的 Connect 它似乎工作得不太好。 |
|
|
3
156
有一个简单而强大的替代方案: 使用包含所需文件名的URL . 当最后一个斜杠后面的名称是您想要的名称时,您不需要任何额外的标题! 这个技巧有效:
如果您的服务器支持URL重写(例如
URL中的字符应为UTF-8,URLEncoded逐字节:
|
|
|
4
61
RFC 6266 描述了__ 在超文本传输协议(HTTP)中使用内容配置头字段 艾斯。引用:
在他们 examples section :
在 Appendix D 此外,还有一长串提高互操作性的建议。它还指向 a site which compares implementations . 当前适用于通用文件名的所有通过测试包括:
那
RFC 5987
依次引用
RFC 2231
,它描述了实际的格式。2231主要用于邮件,5987告诉我们哪些部分也可以用于HTTP头。不要将此与在
|
|
|
5
16
|
|
|
6
11
在ASP.NET MVC2中,我使用类似的方法:
我猜如果你不使用MVC(2),你可以用
|
|
|
7
9
将文件名用双引号括起来。帮我解决了这个问题。这样地:
http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download |
|
|
8
8
我使用以下代码片段进行编码(假设 文件名 包含文件名和扩展名,即:test.txt): PHP:
爪哇:
|
|
|
9
8
在ASP.NET Web API中,i url对文件名进行编码:
|
|
|
10
5
我在所有主要浏览器中测试了以下代码,包括旧的探索者(通过兼容模式),它在任何地方都很好地工作:
|
|
|
11
5
如果您使用的是nodejs后端,那么可以使用我找到的以下代码 here
|
|
|
12
4
我在“download.php”脚本(基于 this blogpost 和 these test cases )
只要只使用iso-latin1和“safe”字符,就使用标准的文件名“…”;否则,它会添加文件名*=utf-8“”的URL编码方式。根据 this specific test case ,它应该从msie9向上运行,在最近的ff、chrome、safari上运行;在较低的msie版本上,它应该提供包含文件名的iso8859-1版本的文件名,并在不在此编码中的字符上加下划线。 最后一点注意:Apache上每个头字段的最大大小是8190字节。UTF-8每个字符最多可以有四个字节;在rawurlencode之后,每个字符有x3=12个字节。效率相当低,但理论上仍有可能在文件名中有超过600个“微笑”%f0%9f%98%81。 |
|
|
13
3
在PHP中,这是为我做的(假定文件名是utf8编码的):
针对IE8-11、Firefox和Chrome进行测试。
|
|
|
14
1
经典ASP解决方案
大多数现代浏览器都支持
不过,我找到了一个解决方案,让代码以utf-8的形式读取和解析二进制文件。
信贷流向
Pure ASP File Upload
通过实施
有用的链接 |
|
|
15
-1
我们在一个Web应用程序中遇到了类似的问题,最终从HTML中读取了文件名。
当然,这并不能直接回答作战问题,但可能是其他人的解决方案。 |
|
|
16
-2
我通常使用url对文件名进行编码(使用%xx),它似乎在所有浏览器中都能工作。无论如何,您可能需要做一些测试。 |