2011-11-03 26 views
7

Trong một dự án gần đây, tôi đã có niềm vui khi khắc phục sự cố một lỗi liên quan đến hình ảnh không tải khi không gian nằm trong tên tệp. Tôi nghĩ "Thật là một vấn đề đơn giản, tôi sẽ UrlEncode() nó!" Nhưng, NAY! Chỉ cần sử dụng UrlEncode() không giải quyết được sự cố.Trong ASP.NET, tại sao có UrlEncode() AND UrlPathEncode()?

Các vấn đề mới là phương pháp HttpUtilities.UrlEncode() chuyển không gian () để plusses (+) thay của %20 như trình duyệt muốn. Vì vậy, file+image+name.jpg sẽ không trả lại trong khi file%20image%20name.jpg được tìm thấy chính xác.

Rất may, đồng nghiệp đã chỉ ra HttpUtilities.UrlPathEncode() cho tôi sử dụng %20 cho không gian thay vì +.

TẠI SAO có hai cách xử lý mã hóa Url? TẠI SAO có hai lệnh hoạt động khác nhau?

+0

Xem http://stackoverflow.com/questions/602642/server-urlencode-vs-httputility-urlencode/603962#603962 để có giải pháp tốt hơn. –

+0

Có thể trùng lặp: http://stackoverflow.com/q/4145823/2291 –

+0

@Mufasa - mmm ... Tôi biết sự khác biệt. Tôi tự hỏi tại sao. – quakkels

Trả lời

9

UrlEncode rất hữu ích để sử dụng với một QueryString như các trình duyệt có xu hướng sử dụng một + đây ở vị trí của một không gian khi nộp tờ với phương pháp GET.

UrlPathEncode chỉ cần thay thế tất cả các ký tự không thể sử dụng trong URL, chẳng hạn như <, >.

Cả hai liên kết MSDN bao gồm trích dẫn này:

Bạn có thể mã hóa URL bằng với phương pháp URLEncode hoặc phương pháp UrlPathEncode. Tuy nhiên, các phương thức trả về các kết quả khác nhau. Phương thức UrlEncode chuyển đổi từng ký tự khoảng trắng thành ký tự cộng (+). Phương thức UrlPathEncode chuyển đổi từng ký tự khoảng trắng thành chuỗi "% 20", đại diện cho một dấu cách trong ký hiệu thập lục phân. Sử dụng phương pháp UrlPathEncode khi bạn mã hóa phần đường dẫn của URL theo thứ tự để đảm bảo URL được giải mã nhất quán, bất kể nền tảng hoặc trình duyệt nào thực hiện giải mã .

+1

Microsoft đã tuyên bố rằng 'UrlPathEncode()' không nên được sử dụng. Đó là một phương pháp trợ giúp được sử dụng để đảm bảo tính tương thích của trình duyệt. Xem liên kết UrlPathEncode của bạn để biết chi tiết. – Basic

+0

UrlEncode không thể được sử dụng để mã hóa các phần của đường dẫn, vì dấu + không được phép ở đó. Xem giải thích: https://stackoverflow.com/a/29948396/991267 Phương thức System.Uri.EscapeDataString có thể được sử dụng để mã hóa các phần đường dẫn. –

2

Vì vậy, trong URL bạn có đường dẫn và sau đó là? và sau đó là các tham số (ví dụ: http://some_path/page.aspx?parameters). Đường dẫn URL mã hóa không gian khác nhau sau đó các tham số url, đó là lý do tại sao có hai phiên bản. Trong một khoảng thời gian dài không hợp lệ trong một URL, nhưng nằm trong các tham số.

Nói cách khác, url định dạng đã thay đổi theo thời gian. Trong một thời gian dài chỉ các ký tự ANSI cũng có thể nằm trong một URL.

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