Как расшифровать "\ u0026" в URL? - PullRequest
7 голосов
/ 09 августа 2011

Я хочу декодировать URL A до B:

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

B) <a href="http://example.com/xyz?params=id,expire&abc=123">http://example.com/xyz?params=id,expire&abc=123</a>

Это пример URL, и я ищу общее решение, а не A.Replace("\/", "/")...

В настоящее время я использую HttpUtility.UrlDecode(A, Encoding.UTF8) и другие Encodings, но не могу сгенерировать URL B!

Ответы [ 2 ]

13 голосов
/ 23 июня 2013

Вам нужна только эта функция

System.Text.RegularExpressions.Regex.Unescape(str);
2 голосов
/ 09 августа 2011

Это базовый пример, который мне удалось придумать:

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

Вероятно, этого очень не хватает в зависимости от типов URL, которые вы собираетесь получить.Он не обрабатывает проверку ошибок, экранирование литералов, например \\u0026 должно быть \u0026.Я бы порекомендовал написать несколько модульных тестов для этого с различными входными данными, чтобы начать работу.

...