2012-09-24 122 views
14

有没有一个标准功能来检查IRI,来检查URL显然,我可以使用:Python:如何检查一个字符串是否是一个有效的IRI?

parts = urlparse.urlsplit(url) 
    if not parts.scheme or not parts.netloc: 
     '''apparently not an url''' 

我尝试了上面的URL包含Unicode字符:

import urlparse 
url = "http://fdasdf.fdsfîășîs.fss/ăîăî" 
parts = urlparse.urlsplit(url) 
if not parts.scheme or not parts.netloc: 
    print "not an url" 
else: 
    print "yes an url" 

和我所得到的是yes an url。这是否意味着我对这个有效的IRI测试很好?有另一种方法吗?

+0

为什么你不应该是好?您的示例是否违反IRI标准定义的任何规则?换句话说:你问我们你的测试是否违反了IRI规则?你自己做了这个研究吗? –

+0

@ Jan-PhilipGehrcke如果我对此感到满意,我会问一位比IRI有更多经验的人。 –

回答

19

使用urlparse不足以测试一个有效的IRI。

使用rfc3987 package代替:

from rfc3987 import parse 

parse('http://fdasdf.fdsfîășîs.fss/ăîăî', rule='IRI') 
+3

'ImportError:No module named rfc3987' so it is not standard,'pip install rfc3987' –

+1

您必须安装他链接到 –

+0

的软件包@DavidRobinson'pip install rfc3987'也可以工作 –

1

the implementation of urlparse中唯一的字符集敏感代码要求该方案仅包含ASCII字母,数字和[+ - 。]字符;否则它是完全不可知的,所以可以很好地处理非ASCII字符。

由于这是non-documented behaviour,您有责任检查它是否仍然如此(在您的项目中进行测试),但我不认为它会改变为打破IRI。

的urllib提供quoting functions虹膜转换到/从ASCII的URI,但他们仍然不提虹膜文件明确,他们在某些情况下破坏:Is there a unicode-ready substitute I can use for urllib.quote and urllib.unquote in Python 2.6.5?

+0

'urllib.quote(url)'似乎可以逃避'http://'到'http%3A //' –

+1

@EduardFlorinescu的':'冒号,默认情况下它只能用于引用IRI;对于完整的IRI,您需要解析,引用和重新组装这些组件。 – ecatmur

相关问题