Validierung der URL mit und ohne Protokoll mit filter_var

9

Ich versuche, die PHP-Erweiterung filter_var() zu validieren. Per Ссылка :

  

Validiert den Wert als URL (gemäß »    Ссылка ), optional mit erforderlich   Komponenten. Achten Sie darauf, dass eine gültige URL das HTTP-Protokoll nicht angibt   http: // Daher ist möglicherweise eine weitere Validierung erforderlich, um die URL zu ermitteln   verwendet ein erwartetes Protokoll, z.B. ssh: // oder mailto :. Notiere dass der   Die Funktion findet nur ASCII-URLs, die gültig sind. internationalisiert   Domänennamen (die Nicht-ASCII-Zeichen enthalten) schlagen fehl.

In Bezug auf Vorsicht, eine gültige URL darf das HTTP-Protokoll nicht angeben , meine unten stehenden Tests zeigen an, dass ein HTTP-Protokoll erforderlich ist ( URL 'stackoverflow.com/' is NOT considered valid. ). Wie interpretiere ich die Dokumentation falsch?

Wie verhindern URLs wie Ссылка die Echtheitsprüfung?

PS. Jegliche Kommentare zu meinem Ansatz, das Protokoll zu bereinigen, wären willkommen.

%Vor%

AUSGABE:

%Vor%     
user1032531 01.06.2015, 13:41
quelle

3 Antworten

2

FILTER_VALIDATE_URL verwendet parse_url() , was leider 'https://https://' als gültige URL parst (wie es wirklich eine gültige URIs RFC ist):

%Vor%

Sie könnten Ihre Funktion sanitazeURL in:

ändern %Vor%

Sie müssen aber immer noch prüfen, ob der Hostname nicht http oder https :

lautet %Vor%     
Tomasz Racia 08.06.2015 13:34
quelle
0

Sie können das http entfernen oder hinzufügen, indem Sie bestätigen, ob es existiert oder nicht.

%Vor%     
Asuquo12 08.06.2015 16:14
quelle
0
  

Wie interpretiere ich die Dokumentation falsch?

Die Spezifikation sagt nichts darüber aus, kein Protokoll zu haben - es besagt lediglich, dass das Protokoll möglicherweise kein HTTP ist.

Sie hacken das wichtige Stück des Satzes in Ihrem Zitat ...

  

Achten Sie darauf, dass eine gültige URL das HTTP-Protokoll http: // nicht angibt   Eine weitere Validierung kann erforderlich sein, um festzustellen, ob die URL verwendet wird   erwartetes Protokoll

Ein Protokoll ist erwartet , es kann oder darf nicht HTTP sein.

    
Fraser 08.06.2015 17:07
quelle

Tags und Links