获取文档 Hello#There.docx
UrlEncode 将正确处理:
HttpUtility.UrlEncode(Hello#There); Hello%23There然而, UrlEncode 将不句柄您好..docx 正确:
HttpUtility.UrlEncode(Hello There.docx); 你好+ There.docx+ 符号仅对URL参数有效,而不适用于文档名称。有趣的是,这实际上可以在Visual Studio测试Web服务器上工作,但不在IIS上。
UrlPathEncode 空格:
HttpUtility.UrlPathEncode(Hello There.docx); Hello%20There.docx但是,它不会转义其他字符,如#字符:
HttpUtility.UrlPathEncode(Hello#there DOCX); Hello#There.docx此链接无效,因为#被解释为一个URL哈希,从来没有甚至到达服务器。
是否有一个.NET实用程序方法来转义所有非文件名中的字母数字字符,还是我必须自己写?
解决方案看看 Uri.EscapeDataString方法:
Uri.EscapeDataString(Hello There.docx)//Hello%20There.docx Uri.EscapeDataString(Hello# There.docx)//Hello%23There.docx
We store a bunch of weird document names on our web server (people upload them) that have various characters like spaces, ampersands, etc. When we generate links to these documents, we need to escape them so the server can look up the file by its raw name in the database. However, none of the built in .NET escape functions will work correctly in all cases.
Take the document Hello#There.docx:
UrlEncode will handle this correctly:
HttpUtility.UrlEncode("Hello#There"); "Hello%23There"However, UrlEncode will not handle Hello There.docx correctly:
HttpUtility.UrlEncode("Hello There.docx"); "Hello+There.docx"The + symbol is only valid for URL parameters, not document names. Interestingly enough, this actually works on the Visual Studio test web server but not on IIS.
The UrlPathEncode function works fine for spaces:
HttpUtility.UrlPathEncode("Hello There.docx"); "Hello%20There.docx"However, it will not escape other characters such as the # character:
HttpUtility.UrlPathEncode("Hello#There.docx"); "Hello#There.docx"This link is invalid as the # is interpreted as a URL hash and never even gets to the server.
Is there a .NET utility method to escape all non-alphanumeric characters in a document name, or would I have to write my own?
解决方案Have a look at the Uri.EscapeDataString Method:
Uri.EscapeDataString("Hello There.docx") // "Hello%20There.docx" Uri.EscapeDataString("Hello#There.docx") // "Hello%23There.docx"
更多推荐
如何在.NET中正确转义文档名称?
发布评论