我的应用程序可以接受带有文件名空格的上传文件。问题是,当我生成这些文件的超链接时,文件名中的空间实际上阻止了我这样做。
DirectoryInfo di = new DirectoryInfo("e:/asdf");
FileInfo[] rgFiles = di.GetFiles("*.*");
if (rgFiles != null)
{
sb.Append("<span class='SubTitle'>Your attachments list:</span>");
foreach (FileInfo fi in rgFiles)
{
sb.Append("<br><a href=e:\\asdf\\" + fi.Name + ">" + fi.Name + "</a>");
}
}
else
{
sb.Append("You don't have any attachment yet.");
}
Shoud我将所有空格替换为下划线?好吧,我不喜欢这样。但是如果我想在fi.name中添加引号,它将不会显示任何文件名。
答案 0 :(得分:1)
只需UrlEncode
文件名。它将使用有效的URL等效项(%20
或+
)替换空格。
sb.FormatAppend("<br><a href=e:\\asdf\\{0}>{1}</a>",
HttpUtility.UrlEncode(fi.Name),
fi.Name);
答案 1 :(得分:1)
你应该在整个网址上加上引号:
foreach (FileInfo fi in rgFiles)
{
sb.Append("<br><a href='e:\\asdf\\" + fi.Name + "'>" + fi.Name + "</a>");
}
这样,如果您的路径有空格,结果HTML将如下所示:
<br><a href='e:\asdf\your file name.txt'>your file name.txt</a>
答案 2 :(得分:0)
空格可以在HTML中表示为%20
。尝试用它替换它们。
但理想情况下,您应该使用XML / HTML解析器转义名称。