2012-09-24 5 views
14

Gibt es eine Standardfunktion eine IRI, zu überprüfen, eine URL zu überprüfen, scheinbar kann ich verwenden:Python: Wie überprüft man, ob eine Zeichenfolge eine gültige IRI ist?

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" 

und was ich bekommen:

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

ich das oben mit einer URL mit Unicode-Zeichen versucht, ist yes an url. Bedeutet das, dass ich gut bin und dies auf gültige IRI testet? Gibt es eine andere Art und Weise ?

+0

Warum sollten Sie nicht gut sein? Verstößt Ihr Beispiel gegen eine vom IRI-Standard definierte Regel? Mit anderen Worten: Fragen Sie uns, ob Ihr Test IRI-Regeln bricht? Haben Sie diese Recherche selbst durchgeführt? –

+0

@ Jan-PhilipGehrcke Ich frage jemanden, der mehr Erfahrung als ich mit IRI hat, wenn ich damit gut bin. –

Antwort

19

Mit urlparse nicht ausreichend ist, zu testen eine gültige IRI.

Verwenden Sie die rfc3987 package statt:

from rfc3987 import parse 

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

'ImportError: Kein Modul namens rfc3987' also ist es nicht Standard,' pip install rfc3987' –

+1

Sie müssen das Paket installieren er verbindet –

+0

@DavidRobinson 'pip installieren rfc3987' funktioniert auch –

1

Der einzige Zeichensatz-sensitive Code in the implementation of urlparse erfordert, dass das Schema nur ASCII-Buchstaben, Ziffern und [+ -.] Zeichen enthalten sollte; Ansonsten ist es völlig agnostisch und funktioniert gut mit Nicht-ASCII-Zeichen.

Da dies non-documented behaviour ist, ist es Ihre Verantwortung zu überprüfen, dass es weiterhin der Fall ist (mit Tests in Ihrem Projekt), aber ich kann mir nicht vorstellen, dass IRI geändert werden würde.

urllib bietet quoting functions IRIs zu/von ASCII-URIs zu konvertieren, obwohl sie nach wie vor IRIs erwähnen nicht explizit in der Dokumentation, und sie sind in einigen Fällen gebrochen: Is there a unicode-ready substitute I can use for urllib.quote and urllib.unquote in Python 2.6.5?

+0

'urllib.quote (url)' scheint zu entkommen ':' Doppelpunkt in der 'http: //' zu 'http% 3A //' –

+1

@EduardFlorinescu ja, standardmäßig funktioniert es nur für die Zitat der Pfad Abschnitt eines IRI; Für eine vollständige IRI müssten Sie die Komponenten analysieren, zitieren und neu zusammensetzen. – ecatmur

Verwandte Themen