2013-01-22 4 views
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?

답변

1

당신은 HttpUtility.UrlEncode

1

HttpUtility.UrlDecode, 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 

주, 하나의 디코드은 당신이 예상하는대로 두 개의 인코딩의 하나 디코딩하는.

관련 문제