我有带空格的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");发布于 2011-12-16 22:17:15
顾名思义,UrlPathEncode对路径进行编码。只是路径,而不是URL的查询部分。如果向path添加一个空格并再次运行该代码,您将看到path部分中的空格被%20替换,但查询部分中的空格没有被替换。
如果您将对UrlPathEncode的调用替换为对Uri.EscapeUriString的调用,它将正确地编码整个URL,而不仅仅是路径。
发布于 2011-12-16 22:03:20
你应该给Uri.EscapeDataString打电话。
发布于 2011-12-16 22:32:04
在您的示例中,将字符串拆分为'?'(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();
}https://stackoverflow.com/questions/8535256
复制相似问题