2011-08-09 13 views
7

Chcę zdekodować URL A do B:Jak rozszyfrować " u0026" w adresie URL?

A) http:\/\/example.com\/xyz?params=id%2Cexpire\u0026abc=123

B) http://example.com/xyz?params=id,expire&abc=123

To jest przykładowy URL i patrzę na ogólne rozwiązanie nie A.Replace("\/", "/")...

Obecnie używam HttpUtility.UrlDecode(A, Encoding.UTF8) i inne Encodings ale nie można wygenerować adresu URL B!

+1

'\ /' głowa już pod wodą, zbyt późno. Nie da się przetłumaczyć broni na/ –

+0

@Hanse: Jest to format "Google". – Xaqron

Odpowiedz

9

Trzeba tylko tę funkcję

System.Text.RegularExpressions.Regex.Unescape(str); 
+0

Dzięki człowieku ... Dosłownie uratowałeś moją ** dzisiejszą noc! – Smartis

2

Jest to podstawowy przykład byłem w stanie wymyślić:

static void Sample() 
{ 
    var str = @"http:\/\/example.com\/xyz?params=id%2Cexpire\u0026abc=123"; 
    str = str.Replace("\\/", "/"); 
    str = HttpUtility.UrlDecode(str); 
    str = Regex.Replace(str, @"\\u(?<code>\d{4})", CharMatch); 
    Console.Out.WriteLine("value = {0}", str); 
} 

private static string CharMatch(Match match) 
{ 
    var code = match.Groups["code"].Value; 
    int value = Convert.ToInt32(code, 16); 
    return ((char) value).ToString(); 
} 

to prawdopodobnie brakuje wiele w zależności od typów adresów URL masz zamiar dostać. Nie obsługuje sprawdzania błędów, uniknięcie literałów, takich jak \\u0026, powinno być \u0026. Zalecałbym napisanie kilku testów jednostkowych dookoła tego z różnymi wejściami, aby zacząć.