[英]URL encoding in python
我在urllib
或其他庫中缺少一個簡單的方法來執行此任務嗎? URL編碼使用“%”后跟兩個十六進制數字替換不安全的ASCII字符。
這是輸入和我的預期輸出的示例:
Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; Galaxy Nexus Build/IFL10C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Mozilla%2F5.0+%28Linux%3B+U%3B+Android+4.0%3B+xx-xx%3B+Galaxy+Nexus+Build%2FIFL10C%29+AppleWebKit%2F534.30+%28KHTML%2C+like+Gecko%29+Version%2F4.0+Mobile+Safari%2F534.30
對於Python 2.x,請使用urllib.quote
使用%xx轉義替換字符串中的特殊字符。 從不引用字母,數字和字符“_.-”。 默認情況下,此函數用於引用URL的路徑部分。 可選的安全參數指定不應引用的其他字符 - 其默認值為“/”。
例:
In [1]: import urllib
In [2]: urllib.quote('%')
Out[2]: '%25'
編輯 :
在您的情況下,為了用加號替換空格,您可以使用urllib.quote_plus
例:
In [4]: urllib.quote_plus('a b')
Out[4]: 'a+b'
對於Python 3.x,請使用quote
>>> import urllib
>>> a = "asdas#@das"
>>> urllib.parse.quote(a)
'asdas%23%40das'
對於帶空格的字符串,請使用quote_plus
>>> import urllib
>>> a = "as da& s#@das"
>>> urllib.parse.quote_plus(a)
'as+da%26+s%23%40das'
請記住,如果輸入是unicode字符串, urllib.quote和urllib.quote_plus都會拋出錯誤:
s = u'\u2013'
urllib.quote(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\urllib.py", line 1303, in quote
return ''.join(map(quoter, s))
KeyError: u'\u2013'
正如在這里回答的那樣,必須明確使用'UTF-8':
urllib.quote(s.encode('utf-8'))
此外,如果您有多個值的字典,最好的方法是urllib.urlencode
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.