c# - 如何在 .NET 中正确转义文档名称?

标签 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 实用程序方法来转义文档名称中的所有非字母数字字符,还是我必须自己编写?

最佳答案

看看 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/

相关文章:

c# - 如何在ListView中选择项目?

javascript - 使用 jQuery 从图像源的文件名复制值以处理并粘贴到 html 中?

javascript - 协助创建动态菜单弹出窗口-js

html - 如何使用CSS修复下拉菜单的大小

C# 读取 CSV 文件

c# - 阻止 WP7 模拟器在 Windows 版本调试时启动

c# - WP7 : Binding to attached properties

c# - 使用自定义 JsonConverter 和自定义 ContractResolver 时出现 StackOverflow 异常

c# - 如何在 C# 中将小数舍入为特定分数?

c# - 如何获取 GitHub 存储库的所有分支的列表?