Die Syntax der Parse_url -Funktion ist sehr einfach:
$url = "https://gitbox.net/path/to/page?name=Zhang San&age=25";
$parts = parse_url($url);
print_r($parts);
Ausgangsergebnis:
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /path/to/page
[query] => name=Zhang San&age=25
)
Wie aus dem obigen Beispiel hervorgeht, kann Parse_url Protokoll, Host, Pfad und Abfrage erfolgreich analysieren.
Zu den Sonderzeichen gehören Chinesen, Räume, # Zeichen, Prozentzeichen (%) usw. Diese Zeichen haben unterschiedliche Bedeutungen in der URL. Wenn die URL direkt eingegeben wird, kann Parse_url Fehler analysieren.
Wenn die URL chinesische oder andere Nicht-ASCII-Zeichen enthält, sollte die URL zuerst codiert werden, da ansonsten Parse_url möglicherweise nicht richtig analysiert werden.
Beispiel:
$url = "https://gitbox.net/search?query=Wettervorhersage";
$parts = parse_url($url);
echo $parts['query']; // Es kann verstümmelten Code ausgeben oder Fehler analysieren
Die richtige Art und Weise besteht darin, zuerst die Urlencode -Codierung zur Abfrageparameter zu verwenden:
$query = urlencode("Wettervorhersage");
$url = "https://gitbox.net/search?query=$query";
$parts = parse_url($url);
echo $parts['query']; // query=%E5%A4%A9%E6%B0%94%E9%A2%84%E6%8A%A5
Leerzeichen müssen in der URL als %20 oder + codiert werden. Wenn Sie Leerzeichen direkt in die URL aufnehmen, kann Parse_url den Inhalt nach dem Speicherplatz abschneiden.
Beispiel:
$url = "https://gitbox.net/search?keyword=hello world";
$parts = parse_url($url);
print_r($parts);
Zu diesem Zeitpunkt wird Parse_url denken, dass die URL nur Keyword = Hallo erreicht und die nachfolgende Welt ignoriert wird. Sollte geändert werden in:
$url = "https://gitbox.net/search?keyword=hello%20world";
$parts = parse_url($url);
print_r($parts);
# wird verwendet, um Fragmentidentifikatoren (Fragment) in der URL darzustellen, die separat analysieren . Wenn # in der URL nicht direkt codiert ist, wird der nachfolgende Inhalt als Fragment betrachtet, was das Analyseergebnis beeinflussen kann.
Beispiel:
$url = "https://gitbox.net/page?name=abc#section2";
$parts = parse_url($url);
print_r($parts);
Ausgabe:
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /page
[query] => name=abc
[fragment] => section2
)
Wenn # Teil des Parameterwerts ist, muss es als %23 codiert werden.
Wenn die URL bereits prozentuale codierte Zeichen enthält, wird Parse_url nicht automatisch dekodiert, was zu Parsenfehlern führen kann. Insbesondere wenn die Codierung unvollständig ist, wird beispielsweise PARSE_URL einen Fehler melden, wenn %2 das letzte Bit fehlt.
Die Lösung besteht darin, sicherzustellen, dass alle Prozentcodes vollständig und gültig sind oder zuerst die URL erkennen und korrigieren.
Frage 1: Parse_url gibt falsche oder unvollständige Ergebnisse zurück <br> Der mögliche Grund ist, dass das URL -Format illegal ist oder illegale Zeichen enthält. Es wird empfohlen , filter_var ($ url, filter_validate_url) zu verwenden, um zuerst die Rechtmäßigkeit der URL zu überprüfen.
Frage 2: Inkonsistente Codierung führt zu Verwirrung des Parameters der Abfrage -Parameter <br> Stellen Sie sicher, dass alle Sonderzeichen korrekt codiert sind, insbesondere Abfragebräge und Pfadenteile.
Frage 3: Der Abfrageteil im Parsing-Ergebnis wird nicht in Schlüsselwertpaare aufgeteilt
Parse_url ist nur für die Aufteilung der URL -Struktur verantwortlich und wird Abfrage nicht in ein Array analysiert. Es kann mit der Parse_str -Funktion kombiniert werden:
parse_str($parts['query'], $queryParams);
print_r($queryParams);
Stellen Sie vor der Verwendung von Parse_url sicher, dass die URL -Zeichenfolge legal ist und die Sonderzeichen korrekt codiert sind.
Chinesische und nicht ascii-Zeichen müssen Urlencode sein.
Spezielle Symbole wie Räume, # , % müssen speziell auf die Codierung beachtet werden.
Bei Abfrageparametern kann Parse_str verwendet werden, um weiter in ein Array zu analysieren.
Überprüfen Sie bei der Begegnung einer Parsing -Ausnahme zuerst das URL -Format und debuggen Sie dann das Codierungsproblem.
Wenn Sie die oben genannten Vorsichtsmaßnahmen beherrschen, können Sie mit Parse_url mit komplexen oder speziellen Zeichen -URLs bequemer werden.
$url = "https://gitbox.net/search?query=" . urlencode("Wettervorhersage#1");
$parts = parse_url($url);
print_r($parts);
if (isset($parts['query'])) {
parse_str($parts['query'], $queryParams);
print_r($queryParams);
}
Dieser Code zeigt die Verarbeitung von chinesischen und # Zeichen und die Analyse von Abfrageparametern.