2012-01-12 29 views
22

Khi gỡ lỗi trong ASP.NET MVC, tôi không thấy sự khác biệt giữa:Tại sao URL dấu phẩy được mã hóa?

http://mysite.com?q=hi,bye 

http://mysite.com?q=hi%2Cbye 

Các chuỗi truy vấn param "q" luôn luôn có một giá trị của "chào, tạm biệt" .

Vậy tại sao dấu phẩy được mã hóa?

Tôi muốn làm điều gì đó như thế này https://stackoverflow.com/a/752109/173957.

Tôi có mẫu đơn này:

<form method="GET" action="/Search"> 
    <input type="hidden" name="q" value="hi,bye"/> 
    <input type="submit" value="ok"/> 
</form> 

Làm thế nào tôi có thể ngăn chặn giá trị này không bị mã hóa?

+3

* Tại sao * bạn có muốn ngăn không cho nó được mã hóa không? ASP.NET sẽ tự động giải mã nó cho bạn, vậy vấn đề là gì? – Jon

+2

Tôi đoán? Q = hi, bye dễ đọc hơn? Q = hi% 2Cbye. Ngoài ra, tôi hầu như chỉ tò mò. –

+0

Nhiều năm trước, tôi đã sử dụng dấu phẩy trong giá trị chuỗi truy vấn của mình một cách rõ ràng vì lý do _specific_ nó được _không được mã hóa_ và do đó dễ đọc trong thanh địa chỉ. Một sự xấu hổ rằng một số thư viện/trình duyệt hiện mã hóa nó. –

Trả lời

16

Thông số URI, RFC 3986, chỉ định thành phần đường dẫn URI không chứa ký tự dành riêng chưa được mã hóa và dấu phẩy là một trong các ký tự dành riêng. Đối với tiểu delims chẳng hạn như dấu phẩy, để lại các rủi ro không mã hóa mà ký tự được coi là cú pháp phân tách trong lược đồ URI. Mã hóa phần trăm đảm bảo ký tự sẽ được chuyển qua dưới dạng dữ liệu.

+23

Trong câu hỏi, dấu phẩy không nằm trong thành phần đường dẫn URI, nhưng trong thành phần truy vấn URI, theo RFC 3986, có thể chứa phân cách phụ, bao gồm dấu phẩy. –

+0

Nếu tôi đang đọc thông số chính xác: 'path = path-absolute' =>' path-absolute = "/" [segment-nz * ("/" segment)] '=>' segment = * pchar' => ' pchar = unreserved/pct-mã hóa/sub-delims/":"/"@" '=>' sub-delims = "!"/"$"/"&"/"'"/"("/")"/"*"/"+"/","/";"/"=" '. Vì vậy, dấu phẩy là hợp lệ trong phân đoạn, truy vấn hoặc đoạn URI. – joeyhoer

2

Điều này thực sự phụ thuộc vào trình duyệt. Trình duyệt có dạng HTML và quyết định cách xây dựng URL dựa trên các đầu vào của biểu mẫu.

Nếu bạn đang sử dụng trình duyệt thực sự cũ (hoặc được lập trình kém), trình duyệt có thể không mã hóa dấu phẩy. Nếu bạn tuân thủ các tiêu chuẩn RFC, nó thực sự cần được mã hóa.

Nếu bạn muốn ngăn không cho dấu phẩy được mã hóa cho tất cả các trình duyệt, bạn sẽ phải sử dụng JavaScript và tự xây dựng URL.

<script lang="JavaScript"> 
    document.location.href = "/Search?q=hi,bye"; 
</script> 

Dù sao thì cũng không sao cả, vì bạn cũng nên giải mã tham số truy vấn và kết quả sẽ giống nhau.

+0

Có, bằng cách sử dụng js chắc chắn sẽ cho phép một để ngăn chặn các tham số truy vấn được mã hóa. –

-1

có một số ký tự chứa ý nghĩa đặc biệt (như +? # Etc) hoặc không được phép trực tiếp (như dấu cách, dấu phẩy, v.v.) trong URL. để sử dụng các ký tự như vậy trong URL, bạn cần phải mã hóa và giải mã chúng. Read more Here

ASP.NET tự động mã hóa và giải mã tất cả các ký tự bắt buộc như thế này nên bạn không cần lo lắng về chúng.

+1

Nhưng nó không thực sự có nghĩa là dấu phẩy được mã hóa. Ngay cả trong liên kết bạn cung cấp, dấu phẩy không được đề cập đến như một ký tự bất hợp pháp. Ngay cả trong phần thử-it-out của liên kết bạn cung cấp, "chào tạm biệt" không khác gì sau khi mã hóa nó. –

+2

Dấu phẩy có ý nghĩa đặc biệt trong URL, bởi vì nó biểu thị các tham số phân đoạn. Xem liên kết [this] (http://en.wikipedia.org/wiki/URI_scheme#Official_IANA-registered_schemes). Tìm kiếm dữ liệu, lược đồ địa lý và ldap –

7

tôi thấy danh sách các nhân vật mà không yêu cầu mã hóa URL: http://web.archive.org/web/20131212154213/http://urldecoderonline.com/url-allowed-characters.htm

Cập nhật
Vì liên kết ban đầu đã phá vỡ, tôi đã sử dụng lưu trữ.org để có được những văn bản sau đây từ trang từ trên tháng 12 năm 2013

Danh sách ký tự URL cho phép

Không Giới Hạn - Có thể được mã hóa nhưng nó không phải là cần thiết

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
a b c d e f g h i j k l m n o p q r s t u v w x y z 
0 1 2 3 4 5 6 7 8 9 - _ . ~ 

reserved - Phải được mã hóa đôi khi

! * ' () ; : @ & = + $ ,/? % # [ ] 
+2

Không còn hoạt động, trang được thay thế bởi trang web quảng cáo. –

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