【问题标题】:Asp.net: path encodingAsp.net:路径编码
【发布时间】:2009-09-14 22:33:47
【问题描述】:

我有一个通过读取目录中的内容创建的图片库。现在,当文件名中有一个“+”时,我立即注意到了一个问题。就像“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 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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      相关资源
      最近更新 更多