2009-10-04 47 views
53

Tôi muốn tạo chuỗi thành URL bằng C#, phải có thứ gì đó trong khung .NET cần trợ giúp, đúng không ?.Làm cách nào để thay thế tất cả các khoảng trống bằng% 20 trong C#

+0

tiêu đề câu hỏi này không phù hợp với câu hỏi. Để thay thế tất cả các khoảng trống bằng% 20 (tiêu đề) trong C#, bạn có thể sử dụng 'String.Replace (" ","% 20 ")'. Nếu bạn đang xây dựng một URL, tất cả những gì bạn cần làm là đặt một giá trị URL vào một chuỗi: 'string url =" https: // site/app /? Q = cats "' Nhưng nếu OP đang nói về việc chuyển một URL như là một GET tham số như một phần của một URL khác hoàn toàn khác, khác với, nói, phát ra một URL vào một thẻ neo HTML trong ASP.NET (hoặc bất kỳ thứ gì). – nothingisnecessary

Trả lời

51

Tôi tin rằng bạn đang tìm kiếm HttpServerUtility.UrlEncode.

System.Web.HttpUtility.UrlEncode(string url) 
+2

Tôi nghĩ [Uri.EscapeUriString()] (https://msdn.microsoft.com/en-us/library/system.uri.escapeuristring%28v=vs.110%29.aspx) là phương pháp thích hợp nếu chúng tôi có để tôn giáo về nó :) –

+10

@StoyanDimov: 'EscapeUriString()' không thoát '&' cũng không '=' cũng không '?, vì vậy' EscapeDataString() 'dường như là một trong những sử dụng. –

+3

Ai đó đã chỉnh sửa câu hỏi này để thay đổi hoàn toàn câu trả lời. Chúng tôi [không nên sử dụng chỉnh sửa để thay đổi ý nghĩa] (http://stackoverflow.com/help/editing) của một bài đăng cụ thể. – palswim

-2

HttpServerUtility.HtmlEncode

Từ các tài liệu:

String TestString = "This is a <Test String>."; 
String EncodedString = Server.HtmlEncode(TestString); 

Cập nhật: Đây thực sự mã hóa Html không url. Sử dụng UrlEncode (TestString) là tất cả những người có thể đọc tốt hơn tôi nói. Không xóa này trên cơ hội tắt ai đó tìm thấy thread này trong khi tìm kiếm mã hóa html.

+3

OP hỏi về Mã hóa URL; không phải HTML Encoding. –

+0

Không, đây là mã hóa HTML, không phải mã hóa URL (như tên ngụ ý ...) –

+0

Yup, bạn nói đúng, sử dụng UrlEncode() để mã hóa url - đây là mã hóa Thực thể Html chỉ –

89

Một cách khác để làm điều này là sử dụng Uri.EscapeUriString(stringToEscape).

+4

Thật không may, phương pháp này không 't thoát '&' ký tự. –

+15

Nó cũng không thoát '=', hay '?'. Nó xuất hiện 'Uri.EscapeDataString()' là con đường để đi. –

40

tôi thấy hữu ích System.Web.HttpUtility.UrlPathEncode(string str);

Nó thay thế không gian với% 20 và không phải với +.

+0

Dường như không có phương thức UrlPathDecode? – syclee

+0

Có, ít nhất là 4.0. System.Web.HttpUtility.UrlDecode ("a% 20b") sản lượng "a b" – Abacus

+2

Nó hoạt động nhưng không sử dụng vì nó dành cho trình duyệt. Sử dụng Uri.EscapeUriString (STRING) để thay thế. MSDN: "Không sử dụng; chỉ dành cho khả năng tương thích của trình duyệt. Sử dụng UrlEncode". http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.urlpathencode.aspx – VRC

15

Để thoát đúng không gian cũng như phần còn lại của các ký tự đặc biệt, hãy sử dụng System.Uri.EscapeDataString(string stringToEscape).

+1

Nếu [nhận xét là câu trả lời thực tế] (http://stackoverflow.com/questions/1517586/how-do-i-replace-all-the-spaces-with-20-in-c-sharp/36462468#comment_1517592), ai đó cần phải làm cho rằng một câu trả lời cho câu hỏi. – palswim

+0

có, điều này xử lý không gian, # và%, nhưng mã hóa/thành% 2f – kite

0

Tôi cũng cần làm điều này, tìm thấy câu hỏi này từ nhiều năm trước nhưng tiêu đề câu hỏi và văn bản không hoàn toàn phù hợp và sử dụng Uri.EscapeDataString hoặc UrlEncode (không sử dụng cái đó!) trừ khi chúng ta đang nói về việc chuyển các URL dưới dạng tham số cho các URL khác.

(Ví dụ, đi qua một URL gọi lại khi thực hiện xác thực mở ID, Azure AD, vv)

Hy vọng đây là câu trả lời thực tế hơn cho câu hỏi: Tôi muốn thực hiện một chuỗi thành một URL sử dụng C# , phải có một cái gì đó trong khuôn khổ .NET sẽ giúp, phải không?

- hai chức năng rất hữu ích cho việc thực hiện chuỗi URL trong C#

  • String.Format để định dạng URL
  • Uri.EscapeDataString cho thoát bất kỳ thông số trong URL

Mã này

String.Format("https://site/app/?q={0}&redirectUrl={1}", 
    Uri.EscapeDataString("search for cats"), 
    Uri.EscapeDataString("https://mysite/myapp/?state=from idp")) 

sản xuất kết quả này

https://site/app/?q=search%20for%20cats&redirectUrl=https%3A%2F%2Fmysite%2Fmyapp

Mà có thể được sao chép một cách an toàn và dán vào thanh địa chỉ của trình duyệt, hoặc src thuộc tính của thẻ HTML A, hoặc sử dụng với curl, hoặc mã hóa thành mã QR, v.v.

+0

Và tương đương JavaScript sẽ giống như '" https: // site/app /? Q = "+ encodeURIComponent (" tìm kiếm mèo ") + "& redirectUrl =" + encodeURIComponent ("https: // mysite/myapp /? state = từ idp") 'tạo ra cùng một đầu ra. – nothingisnecessary

2

Như đã nhận xét về câu chuyện được phê duyệt, phương pháp HttpServerUtility.UrlEncode thay thế dấu cách bằng dấu + thay vì% 20. Sử dụng một trong hai phương pháp này thay vì: Uri.EscapeUriString() hoặc Uri.EscapeDataString()

Mẫu mã:

HttpUtility.UrlEncode("https://mywebsite.com/api/get me this file.jpg") 
//"https%3a%2f%2fmywebsite.com%2fapi%2fget+me+this+file.jpg" 

Uri.EscapeUriString("https://mywebsite.com/api/get me this file.jpg"); 
//"https://mywebsite.com/api/get%20me%20this%20file.jpg" 
Uri.EscapeDataString("https://mywebsite.com/api/get me this file.jpg"); 
//"https%3A%2F%2Fmywebsite.com%2Fapi%2Fget%20me%20this%20file.jpg" 

//When your url has a query string: 
Uri.EscapeUriString("https://mywebsite.com/api/get?id=123&name=get me this file.jpg"); 
//"https://mywebsite.com/api/get?id=123&name=get%20me%20this%20file.jpg" 
Uri.EscapeDataString("https://mywebsite.com/api/get?id=123&name=get me this file.jpg"); 

//"https%3A%2F%2Fmywebsite.com%2Fapi%2Fget%3Fid%3D123%26name%3Dget%20me%20this%20file.jpg" 
Các vấn đề liên quan