C #을 사용하여 URL 매개 변수를 어떻게 디코딩합니까?


146

C #을 사용하여 인코딩 된 URL 매개 변수를 어떻게 디코딩 할 수 있습니까?

예를 들어 다음 URL을 사용하십시오.

my.aspx?val=%2Fxyz2F

답변:


107
Server.UrlDecode(xxxxxxxx)

1
어떤 네임 스페이스?
polina-c

1
@PolinaC System.Web.HttpServerUtilityBase이지만 ASP.NET MVC에서 이미 가져와야합니다.
Filnor

288
string decodedUrl = Uri.UnescapeDataString(url)

또는

string decodedUrl = HttpUtility.UrlDecode(url)

한 번의 호출로 URL이 완전히 디코딩되지 않습니다. 완전히 디코딩하려면이 메소드 중 하나를 루프로 호출 할 수 있습니다.

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

13
Uri.UnescapeDataString (url) 고맙습니다
themhz

@ogi 감사합니다! 나는 단지 한 번의 통화로 완전히 작동하지 않았다는 것을 몰랐습니다! 나는 Uri.UnescapeDataString두 번 달렸고 내가 원하는 것을 얻었다!! : D
C0NFUS3D

2
더 accpeted 대답보다는 이럴 첫 번째 제안은 또한 휴대용 클래스 Libaries (PCLs)에서 작동하기 때문에
다니엘 Veihelmann

2
가장 좋은 답변! 그러나 완전히 디코딩하기 전에 매개 변수가 어떻게 중첩되는지 고려하십시오. 예를 들어 param 값은 다른 인코딩 된 URL과 함께 param을 갖는 인코딩 된 URL 일 수 있습니다. 한번에 완전히 디코딩하면 더 이상 무엇을 말할 수 없습니다. 그것은 대수적 진술에서 모든 파런을 잡아 당기는 것과 같습니다. a = ((b + c) * d) 완전히 제거하면 구성 요소의 의미를 잃을 수 있습니다. a = b + c * d
DanO

2
UnescapeDataString은 여러 경우를 처리하지 않으므로 충분하지 않습니다 (예 : 공백이 포함 된 URL의 매개 변수는 '+'를 사용하지만 UnescapeDataString은 의도적으로 공백으로 변환하지 않습니다). URL에 대한 질문으로 우리는 HttpUtility.UrlDecode를 사용해야합니다.
Lorenz03Tx


23

이 시도:

string decodedUrl = HttpUtility.UrlDecode("my.aspx?val=%2Fxyz2F");

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.