In PHP ist Parse_url eine leistungsstarke Funktion für das Parsen von URLs. Es kann eine URL in mehrere Teile (z. B. Schema, Host, Pfad, Abfrage usw.) aufteilen, was die Verarbeitung von URLs durch die Entwickler erheblich erleichtert. Wenn Sie jedoch auf eine Situation stoßen, in der bei der Verwendung von Parse_url false zurückgegeben wird, bedeutet dies, dass das Parsen fehlgeschlagen ist. In diesem Artikel wird die häufigsten Gründe analysieren, warum Parse_url false zurückgibt und wie man damit umgeht.
Schauen wir uns zunächst ein normales Nutzungsbeispiel an:
$url = "https://gitbox.net/path/to/resource?query=123";
$parsed = parse_url($url);
print_r($parsed);
Die Ausgabe wird sein:
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /path/to/resource
[query] => query=123
)
Wenn Parse_url eine ordnungsgemäß strukturierte URL behandelt, gibt es ein assoziatives Array zurück, das die verschiedenen Komponenten der URL enthält. Wenn die Eingabe jedoch nicht der Spezifikation entspricht, wird FALSE zurückgegeben.
Parse_url hängt intern von der RFC 3986 -Spezifikation ab, und die Parsen fällt fehl, wenn die URL illegale Zeichen enthält (wie Räume, bestimmte Kontrollzeichen, nicht entzündete Sonderzeichen usw.).
Beispiel:
$url = "http://gitbox.net/Weg/Ressource"; // Chinesisch Unkodiert
$result = parse_url($url); // zurückkehren false
Lösung:
Führen Sie Urlencode oder teilweise Codierung der URL durch, um sicherzustellen, dass sie der Spezifikation entspricht.
$url = "http://gitbox.net/" . urlencode("Weg/Ressource");
Parse_url verlangt, dass eine Zeichenfolge eingegeben wird. Wenn Sie ein Array, ein Objekt oder ein Null übergeben, gibt sie direkt falsch zurück.
Beispiel:
$url = null;
$result = parse_url($url); // zurückkehren false
Lösung:
Stellen Sie sicher, dass der String -Typ übergeben wird:
$url = (string)$url;
Obwohl Parse_url relative Pfade (wie /index.php ) unterstützt, kann in einigen Versionen Falsch zurückgegeben werden, wenn es kein Schema gibt und das Format verwirrend ist.
Beispiel:
$url = "://gitbox.net"; // Mangel scheme Präfix
$result = parse_url($url); // zurückkehren false
Lösung:
Vollständige URL:
$url = "http://gitbox.net";
Wenn die URL zu groß ist, eine große Anzahl verschachtelter Parameter enthält oder so komplex gebaut ist, dass sie nicht durch integrierte Funktionen analysiert werden kann, kann dies auch dazu führen, dass das Parsen fehlschlägt.
Lösung:
Versuchen Sie, die URL zu vereinfachen, oder führen Sie die regelmäßige Übereinstimmung und Strukturüberprüfung durch, bevor Sie eingegeben werden.
Um zu verhindern, dass Parse_url fehlschlägt, können die folgenden Strategien angewendet werden:
Strikte Überprüfung der Benutzereingabe : Verwenden Sie die reguläre oder Filterfunktion filter_var ($ url, filter_validate_url) .
Preprocess die URL vorbereiten : Verwenden der Trim , um zusätzliche Räume und Urlencode -Codierungspfade zu entfernen.
Fehlerbehandlungsmechanismus : Stellen Sie nach dem Aufrufen von Parse_url zuerst fest, ob er falsch ist, und führen Sie dann nachfolgende Operationen aus.
Beispielcode:
$url = "https://gitbox.net/path?query=value";
if (($parsed = parse_url($url)) === false) {
echo "URL ungültig";
} else {
print_r($parsed);
}
Verschiedene Versionen von PHP können für Parse_url eine andere Fehlertoleranz aufweisen. Beispielsweise gibt es einen Unterschied beim Umgang mit illegalen Zeichen oder fehlenden Schemata zwischen PHP 5.x und PHP 7.x/8.x. Daher wird bei der Entwicklung von Cross-Versionen empfohlen, immer sicherzustellen, dass die Einführung von Rechts-, vollständiger und RFC 3986-konformen URLs verabschiedet wird.