0

我有一个通过读取目录中的内容创建的图片库。现在,当文件名中有一个“+”时,我立即注意到了一个问题。就像“glas + door.jpg”会坏掉。所以我认为这是一个编码问题,因为它只是“+”号,我认为用“%2b”替换“+”可以解决问题。本地问题已解决,但当我将其上传到主机时,我注意到用“%2b”替换“+”号不再起作用。

所以这就是我开始研究 ASP.NET 的编码可能性的地方。我发现Server.UrlEncodeServer.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 。FileInfo如果需要,我也可以发布那部分代码。

如果有帮助,您可以在此处查看图像如何损坏。这是与Replace("+", "%2b").

提前致谢。

4

2 回答 2

0

这不是真正解决我的问题,但我只是用“加号”替换了所有“+”号。在图像的标题中,我将其替换为“+”。这只是一种解决方法,因为我无法解决我的问题。

于 2009-09-15T21:58:56.640 回答
0

问题是空格可以在 URL:s 中转义为 + 并且服务器无法判断您的意思是 + 还是空格。即使编码为 %2b 它也可能是一个双重编码的空间,所以在解码时它仍然会变成一个空间。

要解决此问题,您可以手动将“+”替换为“%252b”,这将正确解码为 +。

于 2009-10-23T09:56:54.933 回答