2011-12-16 34 views
5

我有Url的空間,並希望用%20替換空格(轉義它們)。 UrlPathEncode應該這樣做,但它不適用於下面有空格的url。有人可以解釋爲什麼它不起作用嗎?UrlPathEncode不能轉義空格

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"); 
+2

您嘗試編碼_path_,但你要逃脫的琴絃都在_query string_。 – fge 2011-12-16 14:02:18

回答

8

顧名思義,UrlPathEncode編碼路徑。 只是的路徑,不是 URL的查詢部分。如果向路徑添加空格並再次運行該代碼,則會看到路徑部分中的空間被替換爲%20,但查詢部分中的空格不是。

如果您將UrlPathEncode替換爲Uri.EscapeUriString,它將正確編碼整個URL,而不僅僅是路徑。

1

您應該致電Uri.EscapeDataString

+0

這是一個C#/ JavaScript frankenlanguage,不是? – spender 2011-12-16 14:06:46

+0

@spender:否;這是一個錯字。固定;謝謝。 – SLaks 2011-12-16 14:10:50

0
Uri.EscapeDataString("this is a test") 

this%20is%20a%20test 
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(); 
}