Aktueller Standort: Startseite> Neueste Artikel> Worauf sollten Sie bei der Verwendung von Parse_url achten, um Subdomain -Namen zu erhalten?

Worauf sollten Sie bei der Verwendung von Parse_url achten, um Subdomain -Namen zu erhalten?

gitbox 2025-05-29

In PHP ist Parse_url eine sehr praktische Funktion, die die URL analysiert und verschiedene Teile davon extrahiert, z. Es gibt jedoch einige Gruben und Details, die in diesem Prozess leicht übersehen werden, sodass wir sie im Folgenden detailliert besprechen.

1. PARSE_URL wird die URL -Legalität nicht überprüfen

Parse_url wird versuchen, die von Ihnen bestandene Zeichenfolge zu analysieren, auch wenn es sich nicht um eine Standard -URL handelt. Zum Beispiel:

 $url = 'not-a-valid-url';
$parsed = parse_url($url);
print_r($parsed);

Zu diesem Zeitpunkt kann $ Parsed nur einen Teil der Informationen zurückgeben, und selbst die Struktur ist wie erwartet völlig unermüdlich. Daher ist es am besten, die URL -Legalität vor der Verwendung von Parse_url zu überprüfen oder zumindest http: // Präfix hinzuzufügen:

 if (!preg_match('#^https?://#', $url)) {
    $url = 'http://' . $url;
}

2. Um die Subdomäne zu erhalten, ist das weitere Parsen des Wirtsfeldes erforderlich.

Parse_url gibt Host zurück, gibt Ihnen jedoch nicht direkt den Namen Subdomain. Zum Beispiel:

 $url = 'https://sub.gitbox.net/path';
$parsed = parse_url($url);
echo $parsed['host']; // Ausgabe sub.gitbox.net

Wir müssen diesen Gastgeber selbst teilen. Die übliche Praxis besteht darin, Exploit zu verwenden:

 $hostParts = explode('.', $parsed['host']);

Wenn das Ergebnis ['sub', 'gitbox', 'net'] ist, kann Sub als Subdomain angesehen werden. Dies ist jedoch nicht immer genau, insbesondere in den folgenden Situationen:

3. Die Struktur des Hauptdomainnamens beträgt nicht immer zwei Segmente

Einige Länder haben zweischichtige Strukturen wie Co.uk und Com.cn. Wenn wir einfach die letzten beiden Felder als Hauptdomänennamen und den Rest als Subdomain behandeln, tritt ein Fehler auf. Zum Beispiel:

 $url = 'https://sub.example.co.uk';
$parsed = parse_url($url);
$hostParts = explode('.', $parsed['host']);

Das Ergebnis ist [ ' Sub', 'Beispiel', 'Co', 'UK'] .

Um dieses Problem zu lösen, müssen Sie eine öffentliche Suffixliste (öffentliche Suffixliste) einführen oder eine Bibliothek von Drittanbietern wie Jeremykendall/Php-Domain-Parser verwenden, um die Grenzen zwischen der Hauptdomäne und der Subdomäne genau zu bestimmen.

4. Achten Sie auf die besondere Behandlung von IPv6- und IP -Adressen

Wenn die URL eine IP -Adresse als Hostnamen verwendet, gibt es natürlich kein Konzept des "Subdomain -Namens":

 $url = 'http://192.168.1.1';
$parsed = parse_url($url);
echo $parsed['host']; // Ausgabe 192.168.1.1

IPv6 -Adressen sind komplexer und enthalten auch Klammern:

 $url = 'http://[2001:db8::1]';
$parsed = parse_url($url);
echo $parsed['host']; // Ausgabe [2001:db8::1]

Keine dieser Situationen sollte fälschlicherweise als Domain -Namen mit Subdomänen behandelt werden.

5. Ignorieren Sie nicht die Auswirkungen der Portnummer

Obwohl Parse_url die Portnummer trennen:

 $url = 'http://sub.gitbox.net:8080';
$parsed = parse_url($url);

Wenn wir jedoch Subdomain -Namen extrahieren, sollten wir nur dem Host achten und nicht von der Portnummer gestört werden. Bei Verwendung regulärer Extraktionsdomainnamen werden manchmal versehentlich den Port zusammengebracht, was zu einem Fehleinschätzung führt.

Zusammenfassen

Die Verwendung von Parse_url zum Extrahieren von Subdomänen ist kein Problem mit einer Größe, das mehrere Grenzsituationen umfasst. Wir empfehlen:

  • Vorher vor dem Gebrauch die URL vorarbeiten, um das Standardformat zu gewährleisten;

  • Verwenden Sie nach der Parsen zuverlässige Methoden, um die Hauptdomäne und Subdomain zu extrahieren.

  • Verwenden Sie öffentliche Suffixlisten, wo dies möglich ist, um die Grenzen der obersten und primären Domänen zu identifizieren.

  • Spezielle Handhabung von IP -Adressen und IPv6;

  • Achten Sie auf Interferenzfaktoren wie Portnummer, kein Protokollpräfix usw.

Nur wenn wir diese Details umfassend berücksichtigen, können wir es vermeiden, in URL -Parsen zu stürzen und ein robusteres System aufzubauen.