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.
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.
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.
$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.
$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.
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.
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.
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.
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.