0

ディレクトリ内のコンテンツを読み取って作成した画像ギャラリーがあります。ファイル名に「+」が含まれていると、すぐに問題に気付きました。「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 を取得します。FileInfo必要に応じて、コードのその部分も投稿できます。

それが役立つ場合は、ここで画像がどのように壊れているかを確認できます。とありReplace("+", "%2b")ます。

前もって感謝します。

4

2 に答える 2

0

問題は、スペースがURL:sで+としてエスケープされる可能性があり、サーバーが本当に+またはスペースを意味するかどうかを判断する方法がないことです。%2bとしてエンコードされている場合でも、二重にエンコードされたスペースである可能性があるため、デコードするとスペースとして表示されます。

これを修正するには、代わりに「+」を「%252b」に手動で置き換えることができます。これにより、+として正しくデコードされます。

于 2009-10-23T09:56:54.933 に答える
0

これは私の問題の本当の解決策ではありませんが、すべての「+」記号を「プラス」に置き換えただけです。画像のキャプションで、「+」に置き換えました。問題を解決できなかったので、回避策です。

于 2009-09-15T21:58:56.640 に答える