2011-12-16 21 views
5

Tôi có Url có dấu cách và muốn thay thế khoảng trống bằng% 20 (thoát chúng). UrlPathEncode nên làm điều đó nhưng nó không hoạt động trên url bên dưới có dấu cách. Ai đó có thể giải thích lý do tại sao nó không hoạt động?UrlPathEncode không thoát không gian

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

Bạn cố gắng để mã hóa các _path_, nhưng chuỗi bạn muốn thoát đang trong string_ _query. – fge

Trả lời

8

Như tên của nó, UrlPathEncode mã hóa các con đường. Chỉ cần đường dẫn, không phải là phần truy vấn của URL. Nếu bạn thêm dấu cách vào đường dẫn và chạy lại mã đó, bạn sẽ thấy rằng khoảng trống trong phần đường dẫn được thay thế bằng %20, nhưng không gian trong phần truy vấn thì không.

Nếu bạn thay thế cuộc gọi thành UrlPathEncode bằng một đến Uri.EscapeUriString, nó sẽ mã hóa chính xác toàn bộ URL, không chỉ đường dẫn.

1

Bạn nên gọi Uri.EscapeDataString.

+0

Đó là C#/javascript frankenlanguage, phải không? – spender

+0

@spender: Không; đó là một lỗi đánh máy. Đã sửa; cảm ơn. – SLaks

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

cho

this%20is%20a%20test 
1

Trong trường hợp của bạn, hãy chia chuỗi cho '?' (Url.split ('?')). Nó sẽ cung cấp cho bạn đường dẫn cơ sở và chuỗi truy vấn. Sau đó mã hóa đường dẫn cơ sở bằng UrlPathEncode() và chuỗi truy vấn bằng UrlEncode(). Sau đó nối thêm cả hai. Điều này sẽ giải quyết vấn đề.

Mẫu mã:

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(); 
} 
+0

Có sự cố khi url chứa (không nên) thêm '?'. – IvanH

+0

Trong trường hợp đó, sử dụng url.Split (Char [], count) và số đếm = 1. Điều này sẽ giải quyết vấn đề của bạn. – smhnkmr

+0

Đây không phải là vấn đề chính bởi sự hiểu biết hiện tại của tôi UrlEncode thoát chuỗi truy vấn như một tổng thể và do đó & không được hiểu là dấu phân cách khi chuỗi truy vấn được diễn giải chính xác trên trang chấp nhận. – IvanH

Các vấn đề liên quan