2013-02-06 41 views
10

Tôi thấy rằng urlencode lọc của Django không mã hóa dấu gạch chéo theo mặc định:Tại sao Django's `urlencode` không mã hóa dấu gạch chéo?

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#urlencode

Tôi biết tôi có thể làm cho nó mã hóa các dấu gạch chéo, nhưng tại sao nó không làm điều đó theo mặc định? Không phải là nó chấp nhận hành vi để mã hóa dấu gạch chéo, cho rằng đó là một ký tự dành riêng trong các URL?

+0

Hãy xem một số trường hợp sử dụng! –

+1

Đọc http://stackoverflow.com/questions/1957115/is-a-slash-equivalent-to-an-encoded-slash-2f-in-the-path-portion-of-a này – catherine

Trả lời

7

Từ nguồn Django, urlencode về cơ bản là trình bao bọc xung quanh phương thức tiện ích urlquote của Django. Từ các nhận xét trong nguồn, urlquote là phiên bản an toàn UTF-8 của urllib.quote.

Vì vậy urlencode đang sử dụng giá trị mặc định giống như python của urllib.quote, và lý do mà urllib.quote không thoát khỏi dấu gạch chéo có thể được tìm thấy trong documentation:

Thay thế ký tự đặc biệt trong chuỗi bằng cách sử dụng thoát% xx. Các chữ cái, chữ số và các ký tự '_.-' không bao giờ được trích dẫn. Theo mặc định, chức năng này nhằm mục đích trích dẫn phần đường dẫn của URL. Tham số an toàn tùy chọn chỉ định các ký tự bổ sung cần không được trích dẫn - giá trị mặc định của nó là '/'.

Vì vậy, lý do là nó thoát khỏi đường dẫn và '/' là một ký tự được mong đợi và hợp lệ hoàn hảo trong một đường dẫn.

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