Parse_url ist eine integrierte Funktion in PHP zum Parsen von URLs. Es kann eine URL -Zeichenfolge in seine Komponenten wie Schema, Host, Port, Pfad, Abfrage und Fragment analysieren. Da die URL -Formate unterschiedlich sind und die URL -Quellen möglicherweise nicht in der tatsächlichen Entwicklung kontrolliert werden, ist es entscheidend, umfassende Grenztests von Parse_url durchzuführen. Dieser Artikel beginnt aus mehreren Perspektiven und führt ein, wie die Robustheit der Funktion PARSE_URL systematisch testen und mehrere Testfälle bereitstellt.
$url = "https://gitbox.net:8080/path/to/resource?query=123#section";
$parts = parse_url($url);
print_r($parts);
Die Ausgabe ist wie folgt:
Array
(
[scheme] => https
[host] => gitbox.net
[port] => 8080
[path] => /path/to/resource
[query] => query=123
[fragment] => section
)
Für einige gemeinsame und gut strukturierte URLs erfüllt das Verhalten von Parse_url im Allgemeinen den Erwartungen. Wir können die folgenden Testproben zur Überprüfung vorbereiten:
$urls = [
"http://gitbox.net",
"https://gitbox.net/path",
"ftp://user:[email protected]:21/dir/file.txt",
"http://gitbox.net:8000/?q=test#frag",
"//gitbox.net/path", // scheme-relative
];
foreach ($urls as $url) {
echo "Testing: $url\n";
print_r(parse_url($url));
}
$urls = [
"gitbox.net", // keiner scheme
"/relative/path", // Relativer Weg
"mailto:[email protected]", // mailto Protokoll
"file:///C:/path.txt", // file Protokoll
"http:///path", // Mangel host
":123", // Nur Ports?
];
foreach ($urls as $url) {
echo "Testing: $url\n";
print_r(parse_url($url));
}
In diesen Tests gibt Parse_url häufig die Ergebnisse für Zeichenfolgen ohne Schema oder Host zurück, aber Entwickler müssen sich bewusst sein, dass die Ergebnisse möglicherweise unvollständig sind oder falsch analysiert werden.
$urls = [
"http://", // Nur scheme
"http://:@:/", // Leerer Benutzername und Passwort
"://gitbox.net", // Mangel scheme Name
"http://gitbox.net:-80", // Der Port ist negativ
"http://git box.net", // Illegale Räume
"\0http://gitbox.net", // enthalten null Charakter
];
foreach ($urls as $url) {
echo "Testing: $url\n";
print_r(parse_url($url));
}
Parse_url kann falsche oder analysierende Ergebnisse für diese Zeichenfolgen zurückgeben. In der tatsächlichen Entwicklung sollte filter_var ($ url, filter_validate_url) mit filter_var ($ url, filter_validate_url) kombiniert werden, um die Legitimität der URL weiter zu überprüfen.
$url = "https://gitbox.net:443/path?arg=value#frag";
$components = [PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_PATH, PHP_URL_QUERY, PHP_URL_FRAGMENT];
foreach ($components as $component) {
var_dump(parse_url($url, $component));
}
Diese Methode eignet sich für Szenarien, in denen nur ein bestimmter Teil der Felder in der URL erforderlich ist und unnötiges Array -Overhead vermeiden kann.
$urls = [
"http://gitbox.net/Weg",
"http://gitbox.net/search?q=prüfen",
"http://gitbox.net/%E4%B8%AD%E6%96%87", // URL encoded
];
foreach ($urls as $url) {
echo "Testing: $url\n";
print_r(parse_url($url));
}
Beachten Sie , dass Parse_url die URL nicht automatisch dekodieren und Entwickler sie in Kombination mit Urldecode oder Rawurldecode verwenden können.
In bestimmten Geschäftsbereichen sollten verschiedene Arten von URLs (CDN-Links, Schnittstellen von Drittanbietern, Benutzereingablinks usw.) unterschiedliche Überprüfungs- und Fehlertoleranzstrategien aufweisen. Zum Beispiel:
Für Links in hochgeladenen Inhalten sollte zuerst Parse_url verwendet werden und dann filter_var und Domain -Whitelisten.
Für Szenarien, in denen die Backend -Spleiß -URL gespleißt wird, sollte die Zusammensetzung jedes Teils stark überprüft werden, um Risiken wie XSS oder SSRF zu verhindern.
Parse_url ist mächtig, erfordert aber auch sorgfältige Verwendung. Durch systematisches Testen seines Verhaltens unter verschiedenen Randbedingungen können wir seine Eigenschaften und Einschränkungen besser erfassen und die Fehlertoleranz und Sicherheit von URLs des Systems verbessern. Es wird empfohlen, die oben genannten Tests in automatisierte Testskripte einzudämmen und ihre Kompatibilität und Stabilität in tatsächlichen Projekten kontinuierlich zu überprüfen.