代码之家  ›  专栏  ›  技术社区  ›  Pickels

ASP.NET:路径编码

  •  0
  • Pickels  · 技术社区  · 15 年前

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

    所以这就是我开始研究ASP.NET的编码可能性的地方。我找到了 Server.UrlEncode Server.UrlPathEncode . 这给了我一些混合的结果,像以前工作过的图像不再工作了。

    那么,正确的路径编码方式是什么?为什么替换“技巧”在我的电脑上有效,而在我的主机环境中无效?

    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 来自某个目录。如果需要,我也可以发布这部分代码。

    如果有帮助的话, here 你可以看到图像是如何破碎的。这就是 Replace("+", "%2b") .

    事先谢谢。

    2 回复  |  直到 15 年前
        1
  •  0
  •   Mats Olsson    15 年前

    问题是,空间可以在url:s中以+形式转义,服务器无法判断您的意思是+还是空间。即使编码为%2b,它也可能是一个双编码空间,因此在解码时它仍然是一个空间。

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

        2
  •  0
  •   Pickels    15 年前

    这不是真正解决我问题的方法,但我只是用“加号”替换了所有的“+”符号。在图片的标题部分,我用“+”替换了它。这只是一个工作,因为我无法解决我的问题。