在我的 asp.net mvc 应用程序中我有代码:
response.ContentType = "application/octet-stream";
response.AddHeader("Content-Disposition", "attachment;filename=" +
HttpUtility.UrlEncode(attachment.FileName));
所以所有的中文字符都被 url 编码为类似 %5C%2D
的东西。在IE/Chrome中,用户下载文件时,获取的是中文文件名(即IE/Chrome会自动对文件名进行url解码)。但在 Firefox 中,他们会得到类似于 %5C%2D%0A.docx
的内容。现在我要删除代码中的 HttpUtility.UrlEncode
。但在这样做之前,我想确认在这种情况下不存在安全问题。你能给我一些想法吗?
编辑 Corbin 的回答是正确的。但是去掉文件名的url编码后,一些使用旧版IE的用户会得到奇怪的乱七八糟的文件名。最后我只为那些用户做 url-encode。
最佳答案
如果名称是 ASCII,则允许用引号引起来。
如果它是非 ASCII,那么你必须使用 RFC 2231 或 RFC 5987 或 RFC 2047 中定义的编码......当然,哪些浏览器支持其中哪些是一个有趣的游戏。 :(
如果您只是将原始的非 ASCII 字节粘贴到 header 中,对于大部分用户来说,它几乎肯定看起来像垃圾。
关于c# - 是否需要对文件名进行url编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7315034/