C#を使用してURLパラメーターをデコードするにはどうすればよいですか?


146

C#を使用してエンコードされたURLパラメーターをデコードするにはどうすればよいですか?

たとえば、次のURLを見てください。

my.aspx?val=%2Fxyz2F

回答:



288
string decodedUrl = Uri.UnescapeDataString(url)

または

string decodedUrl = HttpUtility.UrlDecode(url)

URLは1回の呼び出しで完全にはデコードされません。完全にデコードするには、このメソッドの1つをループで呼び出すことができます。

private static string DecodeUrlString(string url) {
    string newUrl;
    while ((newUrl = Uri.UnescapeDataString(url)) != url)
        url = newUrl;
    return newUrl;
}

13
Uri.UnescapeDataString(url)thanx
themhz

@ogiありがとうございます!たった1回の通話ではうまくいかないことを知りませんでした。Uri.UnescapeDataString二度走って欲しかった!! :D
C0NFUS3D 2013

2
最初の提案はポータブルクラスライブラリ(PCL)でも機能するため、競合する回答よりもIMHOが優れています
Daniel Veihelmann

2
ベストアンサー!ただし、完全にデコードする前に、パラメーターがどのようにネストされているかを検討してください。たとえば、param値は、それ自体が別のエンコードされたURLを持つparamを持つエンコードされたURLである可能性があります。一度に完全にデコードすると、何が何であったかを知ることができなくなります。それはすべての括弧を代数のステートメントから外すようなものです。a =((b + c)* d)完全にエスケープを
解除

2
UnescapeDataStringは、いくつかのケースを処理しないので十分ではありません(たとえば、スペースを含むURLのパラメーターは「+」を使用しますが、UnescapeDataStringは意図的にそれらをスペースに変換しません)。UriはURLだけではなく、URLについて質問するので、HttpUtility.UrlDecodeを使用する必要があります
Lorenz03Tx



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.