无法使用HttpUtility.UrlEncode()方法正确编码Url

时间:2014-05-08 11:10:22

标签: c# url encoding

我创建了一个应用程序,我需要对用户输入的url中的特殊字符进行编码/解码。

例如:如果用户输入http://en.wikipedia.org/wiki/Å,则其各自的网址应为http://en.wikipedia.org/wiki/%C3%85

我使用以下代码制作了控制台应用程序。

string value = "http://en.wikipedia.org/wiki/Å";
Console.WriteLine(System.Web.HttpUtility.UrlEncode(value));

它成功解码了字符Å,并且还编码了://个字符。运行代码后,我得到的输出如下:http%3a%2f%2fen.wikipedia.org%2fwiki%2f%c3%85但我想要http://en.wikipedia.org/wiki/%C3%85

我该怎么办?

2 个答案:

答案 0 :(得分:1)

Uri.EscapeUriString(value)返回您期望的值。但它可能还有其他问题。

.NET Framework中有一些URL编码函数,它们的行为都不同,在不同情况下很有用:

  1. Uri.EscapeUriString
  2. Uri.EscapeDataString
  3. WebUtility.UrlEncode(仅限.NET 4.5)
  4. HttpUtility.UrlEncode(在System.Web.dll中,因此适用于Web应用程序,而非桌面)

答案 1 :(得分:0)

您可以使用正则表达式来选择主机名,然后只对其他部分字符串进行urlencode:

var inputString = "http://en.wikipedia.org/wiki/Å";
var encodedString;
var regex = new Regex("^(?<host>https?://.+?/)(?<path>.*)$");

var match = regex.Match(inputString);
if (match.Success)
    encodedString = match.Groups["host"] + System.Web.HttpUtility.UrlEncode(match.Groups["path"].ToString());

Console.WriteLine(encodedString);