использовать urllib.quote
или urllib.quote_plus
Из документации urllib :
цитата (строка [, сейф])
Заменить специальные символы в строке
используя escape "% xx". Буквы,
цифры и символы "_.-"
никогда не цитируется Дополнительный сейф
параметр указывает дополнительный
символы, которые не должны быть в кавычках
- его значением по умолчанию является '/'.
Пример: quote('/~connolly/')
выход '/%7econnolly/'
.
quote_plus (string [, safe])
Как и quote (), но также заменяет пробелы
со знаком плюс, как требуется для цитирования
Значения HTML-формы. Плюс в
исходная строка экранируется, если
они включены в сейф. Это также
не имеет безопасного значения по умолчанию '/'.
РЕДАКТИРОВАТЬ: использование urllib.quote или urllib.quote_plus для всего URL будет искажать его, как указывает @ ΤΖΩΤΖΙΟΥ:
>>> quoted_url = urllib.quote('http://www.example.com/foo goo/bar.html')
>>> quoted_url
'http%3A//www.example.com/foo%20goo/bar.html'
>>> urllib2.urlopen(quoted_url)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\python25\lib\urllib2.py", line 124, in urlopen
return _opener.open(url, data)
File "c:\python25\lib\urllib2.py", line 373, in open
protocol = req.get_type()
File "c:\python25\lib\urllib2.py", line 244, in get_type
raise ValueError, "unknown url type: %s" % self.__original
ValueError: unknown url type: http%3A//www.example.com/foo%20goo/bar.html
@ ΤΖΩΤΖΙΟΥ предоставляет функцию, которая использует urlparse.urlparse и urlparse.urlunparse для анализа URL-адреса и только кодирования пути. Это может быть более полезным для вас, хотя, если вы создаете URL-адрес из известного протокола и хоста, но с подозрительным путем, вы, вероятно, могли бы сделать то же самое, чтобы избежать urlparse и просто заключить в кавычки подозрительную часть URL-адреса, объединяя известные безопасные части.