2009-02-10 36 views
15

Đây có lẽ là rất đơn giản, nhưng tôi chỉ đơn giản là không thể tìm thấy câu trả lời bản thân mình :(Làm cách nào để thay thế các ký tự đặc biệt trong URL?

về cơ bản, những gì tôi muốn là, cho chuỗi này:

"http://www.google.com/search?hl=en&q=c# đối tượng"

Tôi muốn kết quả này:

http://www.google.com/search?hl=en&q=c%23+objects

tôi chắc chắn rằng có một số lớp helper nơi chôn cất trong khuôn khổ mà sẽ chăm sóc điều đó đối với tôi, nhưng tôi ha ving khó tìm nó.

EDIT: Tôi nên thêm, rằng đây là cho một ứng dụng Winforms.

+0

Something dường như tắt ở đây. Bạn nhận được URL ở đâu mà không có giá trị truy vấn của bạn bị thoát? Nếu bạn tự xây dựng URL, bạn nên thoát khỏi các giá trị truy vấn ("vi" và "đối tượng C#"), ** sau đó ** ghép chúng vào URL. – DLJessup

Trả lời

13

HttpServerUtility.UrlEncode(string)

nên sắp xếp ra bất kỳ ký tự phiền

Để sử dụng nó, bạn sẽ cần phải thêm một tham chiếu đến System.Web (Dự án Trình khám phá> Tham khảo> Thêm tham chiếu> System.Web)

Khi bạn đã hoàn tất, bạn có thể sử dụng nó để mã hóa bất kỳ mục mà bạn muốn thêm vào các chuỗi truy vấn:

System.Web.HttpUtility.UrlEncode("c# objects"); 
+0

Dang 58 giây quá chậm, thời gian để phá vỡ Mavis Beacon! ;-) –

+0

Hmm không biết về điều này. :) – Dacto

+0

Cảm ơn Wilfred .. Tôi không dint về điều này quá :) – Shoban

9

@Wilfred Knievel có câu trả lời được chấp nhận, nhưng bạn cũng có thể sử dụng Uri.EscapeUriString() nếu bạn muốn tránh sự phụ thuộc vào không gian tên System.Web.

+0

giải pháp tốt nhất nếu bạn chỉ sử dụng ứng dụng khách .net. – dmihailescu

+0

Tùy chọn này rất phù hợp để chỉ mã hóa các ký tự đặc biệt như dấu trọng âm và không phải mọi thứ, như dấu gạch chéo hoặc dấu hai chấm. – Andrew

10

Nếu bạn không muốn phụ thuộc vào System.Web, đây là cài đặt "UrlEncode" trong thư viện C# OAuth của tôi (yêu cầu triển khai chính xác - cụ thể là khoảng trắng phải được mã hóa bằng cách sử dụng mã hóa phần trăm thay vì "+ "cho không gian, vv)

private readonly static string reservedCharacters = "!*'();:@&=+$,/?%#[]"; 

public static string UrlEncode(string value) 
{ 
    if (String.IsNullOrEmpty(value)) 
     return String.Empty; 

    var sb = new StringBuilder(); 

    foreach (char @char in value) 
    { 
     if (reservedCharacters.IndexOf(@char) == -1) 
      sb.Append(@char); 
     else 
      sb.AppendFormat("%{0:X2}", (int)@char); 
    } 
    return sb.ToString(); 
} 

để tham khảo http://en.wikipedia.org/wiki/Percent-encoding

+0

Tốt! Không giống như các phương thức trong System.Web, nó cũng mã hóa các ký tự đặc biệt. (Đã phải thêm '-' vào danh sách các ký tự reserverd) – Grastveit

+0

Còn khoảng trống thì sao? Chúng không được mã hóa thành% 20 như chúng cần. – pstarkov

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