2011-08-09 15 views
7

Quiero decodificar URL A-B:¿Cómo decodificar " u0026" en una URL?

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

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

Este es un ejemplo de URL y buscar una solución general, no A.Replace("\/", "/")...

Actualmente utilizo HttpUtility.UrlDecode(A, Encoding.UTF8) y otra Encodings pero no puede generar URL B!

+1

'\ /' ya la cabeza bajo el agua, demasiado tarde. No hay forma de que traduzca las armas a/ –

+0

@Hanse: este es el formato 'Google' que a veces se usa. – Xaqron

Respuesta

9

Sólo necesita esta función

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

Gracias, hombre ... ¡Literalmente has guardado mi a ** esta noche! – Smartis

2

Este es un ejemplo básico que era capaz de llegar a:

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(); 
} 

Esto es probable que falte mucho dependiendo de los tipos de URL que se va a conseguir. No maneja la comprobación de errores, el escape de literales, como \\u0026 debe ser \u0026. Recomiendo escribir algunas pruebas unitarias con varias entradas para comenzar.

Cuestiones relacionadas