簡體   English   中英

python中的URL編碼

[英]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.quoteurllib.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM