utiliser urllib.quote
ou urllib.quote_plus
À partir de la urllib de la documentation:
citation(string[, coffre-fort])
Remplacer des caractères spéciaux dans la chaîne de
à l'aide de la "%xx" s'échapper. Lettres,
les chiffres et les caractères "_.-" sont
jamais citée. La sécurité en option
paramètre spécifie d'autres
les caractères qui ne devrait pas être cité
- sa valeur par défaut est '/'.
Exemple: quote('/~connolly/')
rendements en '/%7econnolly/'
.
quote_plus(string[, coffre-fort])
Comme quote(), mais également remplace les espaces
par des signes plus, tel que requis pour la citation
HTML les valeurs d'un formulaire. En Plus des signes dans le
chaîne d'origine sont échappé à moins que
ils sont inclus dans le coffre-fort. Il a également
n'ont pas de sécurité par défaut est '/'.
EDIT: à l'Aide de urllib.devis ou urllib.quote_plus sur l'ensemble de l'URL sera mutilation, comme @ΤΖΩΤΖΙΟΥ points:
>>> 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
@ΤΖΩΤΖΙΟΥ fournit une fonction qui utilise urlparse.urlparse et urlparse.urlunparse pour analyser les url et seulement coder le chemin. Ce sera peut-être utile pour vous, même si vous êtes la construction de l'URL à partir d'un protocole connu et de l'hôte, mais avec un suspect chemin, vous pourriez probablement faire tout aussi bien pour éviter urlparse et de citer le suspect partie de l'URL, la concaténation avec la connaissance de la sécurité des pièces.