0

私はリダイレクトとリターン URL で何かをしていましたが、何かおかしいことに気付きました。このコード行をビジュアル スタジオのイミディエイト ウィンドウで実行しました。

Uri.EscapeUriString("/z?x=y&w="+Uri.EscapeUriString("/a?b=c&d=e"))
"/z?x=y&w=/a?b=c&d=e"

これは間違ったエスケープのようです。私のアプリは、dがクエリ文字列の一部なのか、後でリダイレクトしたいURLの文字列の一部なのかをどのように知っていると思いますか。そこで、念のため UnescapeDataString を試してみました。

Uri.UnescapeDataString(Uri.EscapeDataString("a b+c"))
"a b+c"

「+」をスペースにデコードしないため、使用すべきではないことがわかりました

Uri.UnescapeDataString("ab+c")
"ab+c"

UnescapeDataString と EscapeUriString の両方が正しくない場合、どうやって uri をエスケープすると思いますか?

4

2 に答える 2

1

あなたは試してみたいと思うかもしれませHttpUtility.UrlEncodeHttpUtility.UrlDecode

于 2013-01-22T01:41:37.367 に答える
1

そうです、HttpUtility.UrlEncodeがその方法です。

ここに例があります。コード:

using System;
using System.Web;

namespace SO14450178
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Uri.EscapeUriString("/z?x=y&w="+Uri.EscapeUriString("/a?b=c&d=e")));
            string encoded = HttpUtility.UrlEncode("/z?x=y&w=" + HttpUtility.UrlEncode("/a?b=c&d=e"));
            Console.WriteLine(encoded);
            Console.WriteLine(HttpUtility.UrlDecode(encoded));
        }
    }
}

出力:

/z?x=y&w=/a?b=c&d=e
%2fz%3fx%3dy%26w%3d%252fa%253fb%253dc%2526d%253de
/z?x=y&w=%2fa%3fb%3dc%26d%3de

ご想像のとおり、1 つの Decode は 2 つの Encode のうちの 1 つだけをデコードすることに注意してください。

于 2013-01-22T01:54:34.223 に答える