UrlPathEncode不会转义空格

时间:2011-12-16 14:00:42

标签: c#

我有空格的Url,并希望用%20替换空格(转义它们)。 UrlPathEncode应该这样做,但它不适用于下面有空格的url。有人可以解释为什么它不起作用吗?

System.Web.HttpUtility.UrlPathEncode("http://a1.quickcatchlabs.com/phototemplates/football_blimp_1.html?i_url=http://lh3.ggpht.com/yf5lVBB_WNBvBHT1HoIzY1SG0-PY5zRCobP3vBacuSk9N346F7CeAIRSFOltR6ZC1-yf-MNKAcAd7bAZ_A=s612-c&i_name=Patriots  vs Redskins&i_venue_name=Gillette Stadium &i_venue_address=Foxborough , MA&d_Score_0=34&d_Score_1=27&d_Period_0=Final&p_name_0=Patriots &p_name_1=Redskins");

4 个答案:

答案 0 :(得分:8)

顾名思义,UrlPathEncode对路径进行编码。 只是路径, URL的查询部分。如果向路径添加空格并再次运行该代码,您将看到路径部分中的空格被%20替换,但查询部分中的空格不是。

如果您将UrlPathEncode的号码替换为Uri.EscapeUriString,则会正确编码整个网址,而不仅仅是路径。

答案 1 :(得分:1)

您应该致电Uri.EscapeDataString

答案 2 :(得分:1)

在您的情况下,将字符串拆分为“?”(url.split('?'))。它将为您提供基本路径和查询字符串。然后用UrlPathEncode()编码基本路径,用UrlEncode()查询字符串。然后追加两者。这样可以解决问题。

示例代码:

public string EncodeURL(string url)
{
    var encodedURL = new StringBuilder();
    var urls = url.Split('?');
    encodedUrl.Append(HttpUtility.UrlPathEncode(urls[0]));
    encodedUrl.Append(HttpUtility.UrlEncode(urls[1]));

    return encodedUrl.ToString();
}

答案 3 :(得分:0)

Uri.EscapeDataString("this is a test")

给出

this%20is%20a%20test