In PHP ist Parse_url eine gemeinsame Funktion, mit der URLs in ihre Komponenten wie Schema, Host, Port, Pfad, Abfrage usw. aufgeteilt werden. Diese Funktion ist in der täglichen Entwicklung sehr praktisch. Wenn die URL jedoch eine IPv6 -Adresse enthält, ist ihr Verhalten etwas komplizierter. In diesem Artikel werden das Verhalten und die Vorsichtsmaßnahmen von Parse_url untersucht, wenn sie sich mit URLs mit IPv6 -Adressen befassen.
Laut RFC 3986 muss der Host -Teil einer URL eine IPv6 -Adresse ist, es muss in quadratische Klammern eingewickelt werden. Zum Beispiel:
http://[2001:db8::1]:8080/path?query=1
Der Zweck von quadratischen Klammern besteht darin, sich vom Dickdarm der Hafennummer zu trennen und Mehrdeutigkeiten zu analysieren.
Die Parse_url -Funktionssyntax von PHP lautet wie folgt:
parse_url(string $url, int $component = -1): array|string|false
Bei der Übergabe einer URL mit einer IPv6 -Adresse kann Parse_url den Host -Teil korrekt identifizieren und extrahieren. Schauen wir uns ein bestimmtes Beispiel an:
$url = 'http://[2001:db8::1]:8080/path?query=1';
$parts = parse_url($url);
print_r($parts);
Das Ausgangsergebnis ist:
Array
(
[scheme] => http
[host] => 2001:db8::1
[port] => 8080
[path] => /path
[query] => query=1
)
Wie Sie sehen können, entfernen Parse_url, obwohl in der IPv6 -Adresse in der ursprünglichen URL Square -Brackets verwendet werden, die Quadratklammern im Rückgabeergebnis, so dass nur der reine Adressteil. Dies ist ein Verhalten, das die Erwartungen entspricht.
Wenn die IPv6 -Adresse in quadratischen Klammern in der URL nicht korrekt umwickelt ist, wird Parse_url nicht richtig analysiert. Zum Beispiel:
$url = 'http://2001:db8::1:8080/path';
$parts = parse_url($url);
Dieser Code gibt False zurück, da Parse_url nicht bestimmen kann, ob 2001: DB8 :: 1: 8080 Host- oder Host Plus -Port ist, was zu einer Mehrdeutigkeit der Syntax führt.
Parse_url unterstützt das Parsen von URLs, die IPv6 -Adressen enthalten, vorausgesetzt, IPv6 -Adressen müssen in quadratische Klammern eingewickelt werden [] .
Das Host -Feld im Rückgabeergebnis enthält keine quadratischen Klammern.
Wenn die IPv6 -Adresse nicht in quadratische Klammern verpackt ist, kann Parse_url falsch analysieren und false zurückgeben.
Diese Funktion gilt für die meisten kanonischen URLs, führt jedoch keine Gültigkeitsprüfung der URL durch (z. B. überprüft nicht, ob die IP -Adresse legal ist).
Stellen Sie sicher, dass die Eingabe -URL dem RFC -Standard folgt, insbesondere das richtige Format für den Host -Teil, wenn Sie Parse_url verwenden, um URLs zu verarbeiten (insbesondere in Szenarien, in denen IPv6 -Adressen enthalten sind). Wenn es sich um eine vom Benutzer eingegebene URL handelt, wird empfohlen, das Format vorzuarbeiten und zu überprüfen, bevor er Parse_url anruft, um das Analyse von Fehlern oder Sicherheitsproblemen zu vermeiden.