我想知道我是否在python中规范化了一个URL。
例如,如果我有一个url字符串:“bar.html goo/http://www.example.com/foo”
我需要一个python库,它可以将额外的空格(或任何其他非规范化字符)转换为正确的URL。
发布于 2008-09-23 13:33:07
看看这个模块:werkzeug.utils。(现在在werkzeug.urls
中)
您要查找的函数名为"url_fix“,其工作原理如下:
>>> from werkzeug.urls import url_fix
>>> url_fix(u'http://de.wikipedia.org/wiki/Elf (Begriffsklärung)')
'http://de.wikipedia.org/wiki/Elf%20%28Begriffskl%C3%A4rung%29'
它在Werkzeug中的实现如下:
import urllib
import urlparse
def url_fix(s, charset='utf-8'):
"""Sometimes you get an URL by a user that just isn't a real
URL because it contains unsafe characters like ' ' and so on. This
function can fix some of the problems in a similar way browsers
handle data entered by the user:
>>> url_fix(u'http://de.wikipedia.org/wiki/Elf (Begriffsklärung)')
'http://de.wikipedia.org/wiki/Elf%20%28Begriffskl%C3%A4rung%29'
:param charset: The target charset for the URL if the url was
given as unicode string.
"""
if isinstance(s, unicode):
s = s.encode(charset, 'ignore')
scheme, netloc, path, qs, anchor = urlparse.urlsplit(s)
path = urllib.quote(path, '/%')
qs = urllib.quote_plus(qs, ':&=')
return urlparse.urlunsplit((scheme, netloc, path, qs, anchor))
发布于 2009-05-10 16:15:41
Real fix in Python 2.7 for that problem
正确的解决方案是:
# percent encode url, fixing lame server errors for e.g, like space
# within url paths.
fullurl = quote(fullurl, safe="%/:=&?~#+!$,;'@()*[]")
有关更多信息,请参阅Issue918368: "urllib doesn't correct server returned urls"
发布于 2009-06-07 16:35:25
因为这个页面是Google搜索该主题的最高结果,所以我认为值得一提的是使用Python在URL规范化方面所做的一些工作,这些工作超出了URL编码空格字符的范围。例如,处理默认端口、字符大小写、缺少尾随斜杠等。
在开发Atom联合格式时,有一些关于如何将URL规范化为规范格式的讨论;这在Atom/Pie wiki上的文章PaceCanonicalIds中有记录。这篇文章提供了一些很好的测试用例。
我相信这次讨论的一个结果是Mark Nottingham的urlnorm.py库,我已经在几个项目中使用了它,并取得了良好的效果。然而,该脚本不能与这个问题中给出的URL一起工作。因此,更好的选择可能是Sam Ruby's version of urlnorm.py,它处理该URL,以及来自Atom wiki的所有上述测试用例。
https://stackoverflow.com/questions/120951
复制相似问题