Aktueller Standort: Startseite> Neueste Artikel> Probleme, die durch die Verwendung von Parse_url zur Analyse unvollständiger URLs verursacht wurden

Probleme, die durch die Verwendung von Parse_url zur Analyse unvollständiger URLs verursacht wurden

gitbox 2025-05-28

Eine unvollständige URL bezieht sich auf eine Zeichenfolge, in der einige Standard -URL -Komponenten fehlen, z . Zum Beispiel:

 $url1 = "/path/to/resource?foo=bar";
$url2 = "www.gitbox.net/index.php?x=1";
$url3 = "gitbox.net";

Keiner davon sind Standard -Voll -URLs, aber in einigen Szenarien müssen wir sie immer noch mit Parse_url analysieren.

2. Grundlegende Verwendung von Parse_url Funktion

Die Definition von Parse_url lautet wie folgt:

 array parse_url(string $url, int $component = -1)

Es gibt ein assoziatives Array zurück, das die Komponenten der URL enthält, oder den Wert des angegebenen Teils in der Zeichenfolge zurückgibt.

Zum Beispiel:

 $url = "https://gitbox.net/index.php?user=chatgpt&lang=php";
print_r(parse_url($url));

Ausgabe:

 Array
(
    [scheme] => https
    [host] => gitbox.net
    [path] => /index.php
    [query] => user=chatgpt&lang=php
)

Zu diesem Zeitpunkt ist die Leistung von Parse_url sehr normal.

3. Welche Probleme werden bei unvollständigen URLs auftreten?

3.1 Fehlender Protokoll, Hostname wird mit dem Pfad verwechselt

Angenommen, die URL lässt das Protokoll aus:

 $url = "gitbox.net/index.php?x=1";
print_r(parse_url($url));

sich herausstellen:

 Array
(
    [path] => gitbox.net/index.php
    [query] => x=1
)

Sie werden feststellen, dass Gitbox.net nicht als Hostname erkannt wird, sondern als Teil des Pfades behandelt wird. Parse_url glaubt, dass die gesamte Zeichenfolge eher ein Pfad als eine URL ist, die den Hostnamen enthält.

3.2 Wenn es nur einen Pfad gibt, ist die Auflösung normal, aber die Informationen sind begrenzt

 $url = "/some/path?foo=bar";
print_r(parse_url($url));

Ergebnis:

 Array
(
    [path] => /some/path
    [query] => foo=bar
)

In diesem Fall kann Parse_url den Pfad und den Abfragezeichen normal analysieren, aber offensichtlich fehlt es Protokoll und Host.

3.3 Nur Hostname, kein Protokoll und Pfad

 $url = "gitbox.net";
print_r(parse_url($url));

Ergebnis:

 Array
(
    [path] => gitbox.net
)

In ähnlicher Weise behandelt Parse_url es als einen Weg, nicht als Host.

4. Lösungen zur Analyse unvollständiger URLs

4.1 Vervollständigen Sie den Abkommensübergang

Wenn Sie wissen, dass die URL HTTP oder HTTPS sein sollte, können Sie das Protokoll vervollständigen, bevor Sie Parse_url aufrufen:

 if (strpos($url, '://') === false) {
    $url = 'http://' . $url;
}
print_r(parse_url($url));

Auf diese Weise kann der Hostname während der Analyse korrekt identifiziert werden, selbst wenn der ursprünglichen URL ein Protokoll fehlt.

4.2 Verarbeitung von Pfaden oder Abfragesteichen getrennt

Wenn die Eingabezeichenfolge offensichtlich eine Pfad- oder Abfragebarstellung ist, können Sie die Host Parse_url überspringen und die Funktion der String -Verarbeitungsfunktion direkt verwenden, um die Parameter zu analysieren.

4.3 vorläufiges Urteil in Kombination mit regulären Ausdrücken

Verwenden Sie eine einfache Regelmäßigkeit, um das URL -Format zu bestimmen, und entscheiden Sie dann, ob das Protokoll vervollständigt oder andere Parsingmethoden angenommen werden soll.

5. Zusammenfassung

Parse_url ist ein sehr bequemes Werkzeug, aber es analysiert Strings streng nach dem URL -Standard. Wenn die Eingangs -URL unvollständig ist, insbesondere das Fehlen eines Protokolls, behandelt sie den Wirt oft fälschlicherweise als Pfad. Der Schlüssel zur Lösung dieses Problems ist:

  • Stellen Sie sicher, dass die Eingangs -URL vollständig ist und zumindest das Protokoll enthält.

  • Wenn es nicht garantiert ist, werden die URL im Voraus vorverarbeitet und vervollständigen Sie sie im Voraus;

  • Verarbeiten Sie den Pfad- oder Abfragezeichenfolge separat.

Dadurch wird sichergestellt, dass die Analyseergebnisse genau sind und nachfolgende Programmfehler vermeiden.

Hier ist ein einfacher Beispielcode, der zeigt, wie man mit unvollständigen URLs umgeht:

 function safe_parse_url($url) {
    if (strpos($url, '://') === false) {
        $url = 'http://' . $url;
    }
    return parse_url($url);
}

$url_examples = [
    "/path/to/resource?foo=bar",
    "gitbox.net/index.php?x=1",
    "https://gitbox.net/api/data?param=value",
    "gitbox.net"
];

foreach ($url_examples as $url) {
    $result = safe_parse_url($url);
    print_r($result);
    echo "--------------------\n";
}

Durch die oben genannten Methoden kann das Problem der Parsen von Parse_url unvollständige URLs effektiv vermieden werden und das Programm ist robust.