8

我想将 URL 解码AB

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

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

这是一个示例 URL,我正在寻找一个通用的解决方案,而不是A.Replace("\/", "/")...

目前我使用HttpUtility.UrlDecode(A, Encoding.UTF8)和其他Encodings但无法生成 URL B

4

2 回答 2

16

你只需要这个功能

System.Text.RegularExpressions.Regex.Unescape(str);
于 2013-06-23T11:27:49.853 回答
2

这是我能够想出的一个基本示例:

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. 我建议围绕这个编写一些单元测试,并使用各种输入来开始。

于 2011-08-09T01:35:12.473 回答