网上有一些针对此类问题的解决方案。并非所有解决方案都适用于所有浏览器,但某些解决方案至少可以保证“保存结果”,尽管它们不能为所有客户端保留最初的“建议”文件名:
第一眼:
内容处置:附件;文件名=我的新文档.pdf;
FF36:显示下载文件“My” :-( IE6:显示“My New Document.pdf”,但打开时可能显示为“My New Document[1].pdf”。IE8:显示“My_New_Document.pdf” , 但也可以附加“[1]”作为 IE6。 ATTN:保存文档时,IE 会保留显示的名称,无论它在直接打开时向所选应用程序提供什么!
第一个改进:
内容处置:附件;filename="我的新文档.pdf";
FF36:按预期工作,即呈现“My New Document.pdf”。IE6+IE8:没有变化,和以前一样。
第二个变化:
内容处置:附件;文件名="我的%20New%20Document.pdf";
(用 %20 替换空格,就像在 URL 编码中一样,并保留双引号。)
FF36:显示发回的内容,即“My%20New%20Document.pdf”。不太好。IE6+IE8:显示“My New Document.pdf”,但分发“My%20New%20Document.pdf”。
第三变体:
内容处置:附件;文件名=我的%20New%20Document.pdf;
(删除双引号,但保留 %20。)
FF36:如上所述——不好。IE6+IE8:同上——也不是很好。
结论:
似乎至少所提出的方法并不能永远解决问题:它们既没有涵盖 1 个浏览器的所有情况,也没有涵盖任何相同选定情况的所有浏览器。
对我来说,最好的结果似乎是用双引号括起来:对于 FF36 和 IE6 有效,对于 IE8(可能对于 IE7),它至少与下划线稳定,即下载和保存渲染相同的文件名下载并打开,除了我们无法阻止的“[1]”。
最后的评论
有人说圣埃克苏佩里的小国王“小王子”说,当一个皇帝要求根本不可能的事情时,他不能真的期望他的人民跟随,导致他命令太阳升起和落下。自然而然地会这样做。就像本王在他的小行星越来越加速旋转时遇到麻烦一样,这些人已经放弃了,只是在服务器端添加了下划线。:-)
但是关于这个主题的 RFC 以及浏览器实现者提供的内容有时很难克服。