2012-09-24 11 views
14

Czy istnieje standardowa funkcja celu odsłuchania IRI, by sprawdzić URL widocznie mogę użyć:Python: Jak sprawdzić, czy ciąg jest prawidłowym IRI?

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

Próbowałem powyżej adresu URL zawierające znaki 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" 

i co otrzymuję to yes an url. Czy to oznacza, że ​​jestem dobry, ten test na prawidłowy IRI? Czy istnieje inny sposób?

+0

Dlaczego nie powinno być dobre? Czy Twój przykład narusza reguły zdefiniowane przez standard IRI? Innymi słowy: czy pytasz nas, czy test łamie jakiekolwiek zasady IRI? Czy sam wykonałeś te badania? –

+0

@ Jan-PhilipGehrcke Pytam kogoś, kto ma więcej doświadczenia niż ja z IRI, jeśli jestem z tym dobry. –

Odpowiedz

19

Korzystanie urlparse nie jest wystarczająca do testowania ważny IRI.

użyć rfc3987 package zamiast:

from rfc3987 import parse 

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

'ImportError: Brak modułu o nazwie rfc3987', więc nie jest standardem,' pip install rfc3987' –

+1

Musisz zainstalować pakiet, który łączy z –

+0

@DavidRobinson 'pip install rfc3987' działa również –

1

Jedyny kod wrażliwy na zestaw znaków w the implementation of urlparse wymaga, aby schemat zawierał tylko litery ASCII, cyfry i znaki [+ -.]; w przeciwnym razie jest całkowicie agnostyczny, więc będzie dobrze działać z znakami spoza ASCII.

Jako że jest to non-documented behaviour, obowiązkiem użytkownika jest sprawdzenie, czy tak jest w dalszym ciągu (z testami w projekcie), ale nie wyobrażam sobie, że zostanie zmieniony w celu przerwania IRI.

urllib zapewnia quoting functions przekonwertować Iris z/ASCII URI, choć nadal nie wspominając Iris wyraźnie w dokumentacji, a oni są podzielone w niektórych przypadkach: Is there a unicode-ready substitute I can use for urllib.quote and urllib.unquote in Python 2.6.5?

+0

'urllib.quote (url)' wydaje się uciec z ':' dwukropka w 'http: //' na 'http% 3A //' –

+1

@EduardFlorinescu tak, domyślnie działa tylko dla cytowania sekcji ścieżki IRI; aby uzyskać pełny IRI, musisz przeanalizować, zacytować i ponownie złożyć komponenty. – ecatmur

Powiązane problemy