如何解码URL中的“\ u0026”?

时间:2011-08-09 01:06:30

标签: c# url urldecode

我希望解码网址AB

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

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

这是一个示例网址,我寻找的是一般解决方案A.Replace("\/", "/")...

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

2 个答案:

答案 0 :(得分:13)

您只需要此功能

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

答案 1 :(得分: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。我建议在此基础上编写一些单元测试,并开始使用各种输入。