Signatur
Beschreibung
Uri\WhatWg\InvalidUrlException ist eine Ausnahme, die ausgelöst wird, wenn eine URL-Zeichenkette nicht dem WHATWG-URL-Standard (Living Standard) entspricht und daher nicht geparst oder verarbeitet werden kann. Sie erweitert \ValueError und gehört zur Uri\WhatWg-Erweiterung, die in PHP 8.4 eingeführt wurde.
Der WHATWG-URL-Standard definiert strenge Regeln für gültige URLs, die von Webbrowsern verwendet werden. Wenn eine URL-Zeichenkette gegen diese Regeln verstößt — etwa durch ungültige Zeichen, fehlende Pflichtbestandteile wie das Schema oder nicht auflösbare Hostnamen — wird diese Ausnahme geworfen, anstatt eine fehlerhafte oder unvollständige URL-Repräsentation zurückzugeben.
Im Gegensatz zu parse_url(), das fehlerhafte URLs oft stillschweigend akzeptiert oder falsch parst, liefert die Uri\WhatWg-Erweiterung ein robustes, standardkonformes Verhalten und macht ungültige URLs durch diese Ausnahme explizit sichtbar. Dies erleichtert die Fehlerbehandlung erheblich.
Die Ausnahme sollte mit einem try/catch-Block abgefangen werden, wann immer Benutzereingaben oder externe Daten als URLs verarbeitet werden, um fehlerhafte Eingaben sicher und kontrolliert zu behandeln.
Beispiele
Ungültige URL abfangen
<?php
use Uri\WhatWg\Url;
use Uri\WhatWg\InvalidUrlException;
try {
$url = Url::parse('das-ist-keine-url');
} catch (InvalidUrlException $e) {
echo 'Ungültige URL: ' . $e->getMessage() . PHP_EOL;
}
Benutzereingabe validieren und sicher verarbeiten
<?php
use Uri\WhatWg\Url;
use Uri\WhatWg\InvalidUrlException;
function verarbeiteUrl(string $eingabe): string {
try {
$url = Url::parse($eingabe);
return (string) $url;
} catch (InvalidUrlException $e) {
// Eingabe ist keine gültige URL nach WHATWG-Standard
return 'Fehler: ' . $e->getMessage();
}
}
echo verarbeiteUrl('https://example.com/pfad?q=test') . PHP_EOL;
echo verarbeiteUrl('http://') . PHP_EOL;
echo verarbeiteUrl('ftp://files.example.org/datei.txt') . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitshinweis: Beim Verarbeiten von URLs aus Benutzereingaben sollte stets InvalidUrlException abgefangen werden, um sicherzustellen, dass nur wohlgeformte, standardkonforme URLs weiterverarbeitet werden. Dies verhindert, dass fehlerhafte oder bösartige URL-Strukturen in die Anwendungslogik gelangen.
Die Klasse steht erst ab PHP 8.4 zur Verfügung. In älteren PHP-Versionen muss auf filter_var($url, FILTER_VALIDATE_URL) oder ähnliche Mechanismen zurückgegriffen werden, die jedoch nicht vollständig dem WHATWG-Standard entsprechen.
Da InvalidUrlException von \ValueError erbt, kann sie auch über einen catch (\ValueError $e)-Block abgefangen werden, was bei allgemeiner Fehlerbehandlung nützlich sein kann.