如何在.NET中正确转义文档名称? [英] How do you correctly escape a document name in .NET?
问题描述
获取文档 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(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中正确转义文档名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!