我们在我们的 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 实用程序方法来转义文档名称中的所有非字母数字字符,还是我必须自己编写?
最佳答案
看看 Uri.EscapeDataString Method :
Uri.EscapeDataString("Hello There.docx") // "Hello%20There.docx"
Uri.EscapeDataString("Hello#There.docx") // "Hello%23There.docx"
关于c# - 如何在 .NET 中正确转义文档名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9400445/