Sử dụng dấu phẩy trong URL: được mã hóa hoặc không được mã hóa


7

Thậm chí đã nhìn thấy một trang, trong đó trong cùng một url có cả dấu phẩy được mã hóa và không được mã hóa, như: https://example.com/product?filter_color:blue,green&filter_size:xl%2Cxxl

Kiến thức của tôi về chủ đề này hơi lộn xộn:

  • Một mặt, trong RRI URI tôi đã đọc, dấu phẩy sẽ là một reservedký tự xã hội và phải ở trong các URL luôn được mã hóa.
  • Mặt khác tôi đã thấy nhiều trang web, nơi dấu phẩy không được mã hóa.

Câu hỏi đặt ra là do việc sử dụng cả biến thể được mã hóa và không được mã hóa: làm thế nào để thực hiện chính xác: mã hóa hay không mã hóa?




Nếu bạn sử dụng chúng, có lẽ bạn cần phải chuẩn bị để hỗ trợ URL với cả hai được mã hóa và không được mã hóa.
Stephen Ostermiller

@StephenOstermiller: câu hỏi của tôi là về lý do tại sao và làm thế nào trong cùng một url được mã hóa và dấu phẩy không được mã hóa? Tại sao trình duyệt không xử lý chúng trên cùng một nghệ thuật thống nhất? HOẶC cả hai được mã hóa, EITHER đều không được mã hóa. BTW: về mặt SEO, nếu cả hai ký hiệu được cho phép, chúng sẽ gây ra nội dung trùng lặp. Vì vậy, nó không hoàn toàn chính xác để tranh luận, chủ đề không có bất kỳ tác động SEO.
Evgeniy

1
Một URL được mã hóa tương đương với phiên bản chưa được mã hóa của nó (ví dụ, các tên miền trừng phạt), không có khía cạnh nội dung trùng lặp. Nó sẽ chỉ được thu thập và lập chỉ mục theo một cách. Cá nhân, tôi sẽ giữ các ký tự sôi nổi (như dấu cách, dấu phẩy, dấu hai chấm, v.v.) khỏi URL, giữ mọi thứ dễ dàng cho người dùng của bạn.
John Mueller

Câu trả lời:


9

,là một nhân vật dành riêng. Các ký tự dành riêng không bao giờ tương đương (cho mục đích chuẩn hóa) với các biến thể được mã hóa phần trăm của chúng. Vì vậy, các URI này không tương đương :

http://example.com/?foo,bar
http://example.com/?foo%2Cbar

Cả thông số URI tiêu chuẩn ¹ cũng không phải thông số kỹ thuật URI HTTP / HTTPS đều xác định vai trò đặc biệt ,trong thành phần truy vấn. Điều này có nghĩa là các tác giả có thể sử dụng ,để thể hiện dữ liệu trong thành phần truy vấn (nghĩa là cho bất cứ điều gì họ muốn).

Có thể có ý nghĩa khi sử dụng ,cùng với %2Ctrong thành phần truy vấn của URI. Ví dụ: một tác giả có thể quyết định sử dụng ,để phân tách các cặp giá trị tên và %2Cđể biểu thị dấu phẩy trong các giá trị:

http://example.com/?score:1%2C4,time:55

(Tuy nhiên, dường như không có ý nghĩa gì trong URI ví dụ trong câu hỏi của bạn. Giả sử rằng các giá trị là "xanh dương" và "xanh lục", cũng như "xl" và "xxl", điều đó sẽ có ý nghĩa hơn đối với một trong hai sử dụng , hoặc %2C trong cả hai trường hợp. URI ví dụ của bạn sẽ có ý nghĩa nếu ví dụ: trường hợp sau thực sự là một giá trị, vì vậy "xl, xxl".)


Lưu ý rằng RFC 2396 đã lỗi thời. Tiêu chuẩn URI của IETF phải luôn có thể truy cập được theo STD 66 , hiện là RFC 3986 .

Tôi đã đưa ra một câu trả lời tương tự cho câu hỏi Hiệu ứng phụ có thể sử dụng dấu phẩy trong chuỗi truy vấn? trên Stack Overflow.


đó là một ví dụ thực tế - buồn nhưng đúng. cho phần còn lại - hoàn toàn đồng ý. tôi cũng nghĩ rằng việc sử dụng các dấu phẩy được mã hóa và không mã hóa khác nhau ít nhất nên được giải thích bằng các mục đích sử dụng khác nhau, như sử dụng như các thực thể khác nhau, dấu phân cách và một phần của giá trị có ý nghĩa. đã bị nhầm lẫn bởi tiêu chuẩn, vì vậy tôi cho rằng chỉ có một loại sử dụng: hoặc được mã hóa, hoặc không được mã hóa
Evgeniy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.