Python – URL encoding in python


Is there a simple method I'm missing in urllib or other library for this task? URL encoding replaces unsafe ASCII characters with a "%" followed by two hexadecimal digits.

Here's an example of an input and my expected output:

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


Best Solution

For Python 2.x, use urllib.quote

Replace special characters in string using the %xx escape. Letters, digits, and the characters '_.-' are never quoted. By default, this function is intended for quoting the path section of the URL. The optional safe parameter specifies additional characters that should not be quoted — its default value is '/'.


In [1]: import urllib

In [2]: urllib.quote('%')
Out[2]: '%25'


In your case, in order to replace space by plus signs, you may use urllib.quote_plus


In [4]: urllib.quote_plus('a b')
Out[4]: 'a+b'

For Python 3.x, use quote

>>> import urllib
>>> a = "asdas#@das"
>>> urllib.parse.quote(a)

and for string with space use quote_plus

>>> import urllib
>>> a = "as da& s#@das"
>>> urllib.parse.quote_plus(a)