PHP 8.5 nimmt eine URI-Erweiterung in die Standardbibliothek auf. Sie liefert die beiden unveränderlichen Klassen Uri\Rfc3986\Uri und Uri\WhatWg\Url. Eine zusätzliche Installation ist nicht nötig. Die RFC-3986-Seite nutzt uriparser. Die WHATWG-Seite basiert auf der Lexbor-Engine, die auch die DOM-API von PHP 8.4 antreibt.
<?php
use Uri\Rfc3986\Uri;
$uri = new Uri('https://shop.example/catalog/electronics?page=2&brand=acme#reviews');
echo $uri->getScheme();
echo $uri->getHost();
echo $uri->getPath();
echo $uri->getQuery();
echo $uri->getFragment();Die Erweiterung behebt Grenzen von parse_url(), das seit PHP 4 zu PHP gehört. Die Funktion gibt ein assoziatives Array mit je nach Eingabe unterschiedlichen Schlüsseln zurück. Eine URL-Validierung findet nicht statt, und der Wiederaufbau wird nicht unterstützt. Bei beschädigten oder nicht vertrauenswürdigen Eingaben sind unerwartete Ergebnisse möglich. Die neuen Klassen erzeugen typisierte Objekte und prüfen die Eingabe beim Parsen.
Die beiden Klassen stehen für unterschiedliche Standards. Uri\Rfc3986\Uri eignet sich für allgemeine URI-Syntax, darunter URNs, eigene Schemes und relative Referenzen. Uri\WhatWg\Url folgt dem browsernahen WHATWG-Modell für Weblinks. Ohne Basis-URL erwartet diese Klasse eine absolute URL. Sie verarbeitet Unicode- und ASCII-Formen internationalisierter Hostnamen und kann einen Hostnamen mit toAsciiString() als Punycode serialisieren.
Eine URN wie urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6 gehört zum RFC-3986-Modell. Eine Webadresse wie https://exämple.com/path?query=1 kann mit der WHATWG-Klasse verarbeitet werden. Die RFC-Klasse stellt normalisierte Bestandteile über Methoden wie getScheme(), getHost(), getPath(), getQuery() und getFragment() bereit. Für unveränderte Werte gibt es unter anderem getRawUserInfo(), getRawUsername(), getRawHost() und getRawPath(). Beide APIs liefern Zugriff auf Authentifizierungsdaten. Die WHATWG-Klasse ergänzt URL-spezifische Methoden wie getAsciiHost() und getUsername().
Ungültige Eingaben lösen typisierte Ausnahmen aus. Beim RFC-3986-Modell können Uri\UriException oder Uri\InvalidUriException auftreten. Die WHATWG-Klasse kann Uri\WhatWg\InvalidUrlException auslösen. Statisches Parsen bietet auch einen Weg ohne Ausnahmen. Uri\Rfc3986\Uri::parse() gibt ein Objekt oder null zurück. Uri\WhatWg\Url::parse() kann zusätzlich ein übergebenes errors-Array mit UrlValidationError-Objekten füllen. Damit lassen sich Validierungsfehler, etwa bei Formulareingaben, auswerten.
Beide Klassen verwenden unveränderliche wither-Methoden. withScheme(), withPath(), withQuery(), withPort() und withFragment() erzeugen jeweils ein neues Objekt. Der ursprüngliche Wert bleibt erhalten. Für die Serialisierung stehen toString(), toRawString() und toAsciiString() bereit. Uri\WhatWg\Url::equals() und die entsprechende RFC-3986-Methode vergleichen normalisierte URI-Werte. UriComparisonMode::IncludeFragment legt fest, ob ein Fragment in den Vergleich einfließt.
PHP empfiehlt die neuen Klassen für neuen Code und für Migrationen, sofern bestehendes parse_url()-Verhalten nicht aus Kompatibilitätsgründen erhalten bleiben muss. Eine Validierung mit einem Parser und der spätere Abruf mit einem anderen Parser kann Sicherheitsrisiken erzeugen. Die URI-Erweiterung bietet PHP-Anwendungen eine gemeinsame Grundlage für standardkonformes Parsen, Validieren, Vergleichen und Ändern.




Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.