2012-07-03 26 views
9

Tôi đang đối mặt với một vấn đề với urllib.url_encode trong python. Cược được giải thích với một số mã:Làm thế nào để thoát khỏi một biểu tượng ống (|) cho url_encode trong python

>>> from urllib import urlencode 
>>> params = {'p' : '1 2 3 4 5&6', 'l' : 'ab|cd|ef'} 
>>> urlencode(params) 
'p=1+2+3+4+5%266&l=ab%7Ccd%7Cef' 

Tôi muốn giữ đường ống ('|') trong tham số l. bạn có thể cho tôi biết làm thế nào?

Kết quả sẽ được

'p=1+2+3+4+5%266&l=ab|cd|ef' 

PS: Tôi không muốn cùng nhau đưa các URL bằng tay, nhưng sử dụng urlencode cho điều đó.

Cảm ơn -Pat

+0

Nếu bạn cần các đường ống trong đó, bạn không urlencoding, đơn giản như vậy. – Wrikken

+9

urlencode và sau đó thay thế '% 7C' bằng' | ' – TheZ

+0

Vì vậy, về cơ bản bạn muốn mã hóa URL và sau đó hoàn nguyên một phần mã hóa? Tại sao bạn mã hóa URL sau đó? Dường như với tôi rằng các URL có ký hiệu ống có thể gây ra sự cố. (http://stackoverflow.com/questions/11298404/the-connection-was-reset-asp-net) – chiccodoro

Trả lời

13

Chuyển đổi một đối tượng lập bản đồ hoặc một chuỗi các tuples hai yếu tố để một “phần trăm mã hóa” chuỗi [...]

Phương pháp urlencode() là hành động như mong đợi. Nếu bạn muốn ngăn chặn mã hóa thì trước tiên bạn có thể mã hóa toàn bộ đối tượng và sau đó thay thế các ký tự được mã hóa bằng các đường ống.

>>> u = urlencode(params) 
>>> u.replace('%7C', '|') 
'p=1+2+3+4+5%266&l=ab|cd|ef' 
+0

Tôi nghĩ thay thế | với \ | hoặc một cái gì đó trước khi urlencoding nên wor, nhưng giải pháp của bạn cũng OK. Cảm ơn – wzr1337

+0

Việc thêm ký tự thoát chuẩn '\\' sau đó sẽ được chuyển thành% 5C. Cách duy nhất để giải quyết nó sẽ là thay thế nó sau khi nó đã được mã hóa. – RobB

1

Nó là đơn giản bằng Python 3:

urllib.parse.urlencode(params, safe='|') 
Các vấn đề liên quan