Skip to content Skip to sidebar Skip to footer

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

Solution 1:

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 '/'.

example:

In [1]: import urllib

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

EDIT:

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

example:

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)
'asdas%23%40das'

and for string with space use quote_plus

>>>import urllib>>>a = "as da& s#@das">>>urllib.parse.quote_plus(a)
'as+da%26+s%23%40das'

Solution 2:

Keep in mind that both urllib.quote and urllib.quote_plus throw an error if an input is a unicode string:

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'

As answered here on SO, one has to use 'UTF-8' explicitly:

urllib.quote(s.encode('utf-8'))

Solution 3:

Also, if you have a dict of several values, the best way to do it will be urllib.urlencode.

Post a Comment for "Url Encoding In Python"