web-development-kb-asia.site

C # có tương đương với encodeURIComponent () của JavaScript không?

Trong JavaScript:

encodeURIComponent("©√") == "%C2%A9%E2%88%9A"

Có tương đương cho các ứng dụng C # không? Để thoát các ký tự HTML tôi đã sử dụng:

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
    m => @"&#" + ((int)m.Value[0]).ToString() + ";");

Nhưng tôi không chắc chắn làm thế nào để chuyển đổi trận đấu sang định dạng thập lục phân chính xác mà JS sử dụng. Ví dụ mã này:

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
    m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));

Trả về "%a9%221a" cho "©√" thay vì "%C2%A9%E2%88%9A". Có vẻ như tôi cần chia chuỗi thành byte hoặc thứ gì đó.

Chỉnh sửa: Đây là cho một ứng dụng windows, các mục duy nhất có sẵn trong System.Web là: AspNetHostingPermission, AspNetHostingPermissionAttributeAspNetHostingPermissionLevel.

122
travis

Uri.EscapeDataString hoặc HttpUtility.UrlEncode là cách chính xác để thoát một chuỗi có nghĩa là một phần của URL.

Lấy ví dụ chuỗi "Stack Overflow":

  • HttpUtility.UrlEncode("Stack Overflow") -> "Stack+Overflow"

  • Uri.EscapeUriString("Stack Overflow") -> "Stack%20Overflow"

  • Uri.EscapeDataString("Stack + Overflow") -> Cũng mã hóa "+" to "%2b" ----> Stack%20%2B%20%20Overflow

Chỉ cuối cùng là chính xác khi được sử dụng như một phần thực tế của URL (trái ngược với giá trị của một trong các tham số chuỗi truy vấn)

195
Steve

HttpUtility.HtmlEncode/Giải mã
[.__.] HttpUtility.UrlEncode/Giải mã

Bạn có thể thêm một tham chiếu đến System.Web Hội nếu nó không có sẵn trong dự án của bạn

19
David Thibault

System.Uri.EscapeUriString () dường như không làm gì cả, nhưng System.Uri.Escape Dữ liệ String () làm việc cho tôi.

11
Echilon

Hãy thử Server.UrlEncode() hoặc System.Web.HttpUtility.UrlEncode() trong các trường hợp khi bạn không có quyền truy cập vào đối tượng Server. Bạn cũng có thể sử dụng System.Uri.EscapeUriString() để tránh thêm tham chiếu vào System.Web Hội.

9
Billy Jo

Đối với Ứng dụng Windows Store, bạn sẽ không có httpUtility. Thay vào đó, bạn có:

Đối với một URI, trước '?':

  • Hệ thống. Uri.EscapeUriString ("example.com/Stack Overflow ++?") [.__.]
    • -> "example.com/Stack%20Overflow++?"

Đối với tên hoặc giá trị truy vấn URI, sau dấu '?':

  • Hệ thống. Uri.EscapeDataString ("Stack Overflow ++") [.__.]
    • -> "Ngăn xếp% 20Overflow% 2B% 2B"

Đối với một x-www-form-urlencoding tên hoặc giá trị truy vấn, trong một nội dung POST:

  • System.Net. WebUtility.UrlEncode ("Stack Overflow ++") [.__.]
    • -> "Chồng + tràn% 2B% 2B"
6
Cœur

Bạn có thể sử dụng đối tượng Máy chủ trong không gian tên System.Web

Server.UrlEncode, Server.UrlDecode, Server.HtmlEncode và Server.HtmlDecode.

Chỉnh sửa: poster thêm rằng đây là một ứng dụng Windows chứ không phải là một trang web như người ta có thể tin. Các mục được liệt kê ở trên sẽ có sẵn từ lớp HttpUtility bên trong System.Web, phải được thêm vào như một tài liệu tham khảo cho dự án.

6
Mitchel Sellers