你如何正确地逃避.NET中的文档名称?

时间:2012-02-22 18:06:24

标签: c# .net html escaping

我们在我们的Web服务器(人们上传它们)上存储了一堆奇怪的文档名称,这些文档名称包含空格,符号等各种字符。当我们生成这些文档的链接时,我们需要将它们转义,以便服务器可以查找该文件的原始名称在数据库中。但是,在所有情况下,内置的.NET转义函数都不会正常工作。

获取文档Hello#There.docx

UrlEncode会正确处理:

HttpUtility.UrlEncode("Hello#There");
"Hello%23There"

但是,UrlEncode

}

Hello There.docx

HttpUtility.UrlEncode("Hello There.docx"); "Hello+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实用程序方法来转义文档名称中的所有非字母数字字符,或者我是否必须自己编写?

3 个答案:

答案 0 :(得分:14)

查看Uri.EscapeDataString Method

Uri.EscapeDataString("Hello There.docx")  // "Hello%20There.docx"

Uri.EscapeDataString("Hello#There.docx")  // "Hello%23There.docx"

答案 1 :(得分:6)

我会以不同的方式处理它:不要在查找中使用文档名称作为键 - 使用Guid或其他可以映射到磁盘上文档名称的id参数数据库中的 。这不仅保证了唯一性,而且你也不会首先遇到这种逃避问题。

答案 2 :(得分:0)

您可以使用@ character来转义字符串。请参阅以下代码段。

string str = @"\n\n\n\n";
 Console.WriteLine(str);

输出:\ n \ n \ n \ n

string str1 = @"\df\%%^\^\)\t%%";
Console.WriteLine(str1);

输出:\ df \ %% ^ \ ^)\ t %%

这种格式对于路径名和创建正则表达式非常有用。