【发布时间】:2009-09-14 22:33:47
【问题描述】:
我有一个通过读取目录中的内容创建的图片库。现在,当文件名中有一个“+”时,我立即注意到了一个问题。就像“glas + door.jpg”会坏掉。所以我认为这是一个编码问题,因为它只是“+”号,我认为用“%2b”替换“+”可以解决问题。本地问题已解决,但当我将其上传到主机时,我注意到将“+”号替换为“%2b”不再起作用。
这就是我开始研究 ASP.NET 编码可能性的地方。我找到了Server.UrlEncode 和Server.UrlPathEncode。这给了我一些混合的结果,比如以前有效的图像不再有效。
那么编码路径的正确方法是什么?为什么替换“技巧”在我的 PC 上有效,但在我的托管环境中无效?
public List<fileInfo> RenderImages()
{
List<fileInfo> RenderImages = new List<fileInfo>();
var Images = GetImages();
if (Images != null)
{
foreach (var Image in Images)
{
string FullPath = Path + FolderName + "/" + Image.Name.Replace("+", "%2b");
string ImageName = Image.Name.Replace(Image.Extension, string.Empty);
RenderImages.Add(new fileInfo { path = FullPath, name = ImageName });
}
}
return RenderImages;
}
public class fileInfo
{
public string path { get; set; }
public string name { get; set; }
}
GetImages() 函数从某个目录获取 jpg、gif 和 png FileInfos。如果需要,我也可以发布那部分代码。
如果有帮助,here 你可以看到图像是如何损坏的。这是Replace("+", "%2b")。
提前致谢。
【问题讨论】:
-
Server.UrlEncode 是要走的路。问题:您是否需要将图像的完整路径分配给图像 src 属性?将 RenderImages.Add(new FileInfo {path = "/" + Server.UrlEncode(FolderName + "/" + Image.Name), name = ImageName});工作得更好?
-
是的,我需要完整路径。我尝试只对文件夹名称和 image.name 进行编码,这似乎也可以在本地工作,但在我的主机上它会破坏所有图像。
标签: asp.net url-encoding