我有空格的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");
答案 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