PHP 8.5 intègre une extension URI à sa bibliothèque standard. Elle fournit deux classes immuables, Uri\Rfc3986\Uri et Uri\WhatWg\Url, sans dépendance supplémentaire. L'implémentation RFC 3986 s'appuie sur uriparser. L'implémentation WHATWG réutilise le moteur Lexbor, déjà employé par l'API DOM de PHP 8.4.
<?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();Cette extension répond aux limites historiques de parse_url(), disponible depuis PHP 4. La fonction renvoie un tableau associatif dont les clés dépendent de l'entrée. Elle ne valide pas les URL et ne propose pas de reconstruction. Les entrées malformées ou non fiables peuvent donc produire des résultats inattendus. Les nouvelles classes créent des objets typés et contrôlent l'entrée lors de l'analyse.
Les deux classes appliquent des modèles différents. Uri\Rfc3986\Uri convient à la syntaxe URI générale, notamment aux URN, aux schemes personnalisés et aux références relatives. Uri\WhatWg\Url suit le modèle WHATWG utilisé par les navigateurs pour les liens web. Sans URL de base, cette classe attend une URL absolue. Elle distingue les formes Unicode et ASCII des noms d'hôte internationalisés et peut produire une représentation Punycode avec toAsciiString().
Une URN telle que urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6 relève du modèle RFC 3986. Une adresse comme https://exämple.com/path?query=1 peut être traitée par la classe WHATWG. L'API RFC expose les composants normalisés avec getScheme(), getHost(), getPath(), getQuery() et getFragment(). Elle fournit aussi des accesseurs bruts, notamment getRawUserInfo(), getRawUsername(), getRawHost() et getRawPath(). Les deux API donnent accès aux informations d'authentification. La classe WHATWG ajoute des méthodes comme getAsciiHost() et getUsername().
Les constructeurs signalent les entrées invalides avec des exceptions dédiées. Le modèle RFC 3986 peut produire Uri\UriException ou Uri\InvalidUriException. Le constructeur WHATWG peut produire Uri\WhatWg\InvalidUrlException. Les méthodes statiques proposent un traitement sans exception. Uri\Rfc3986\Uri::parse() renvoie un objet ou null. Uri\WhatWg\Url::parse() peut également remplir un tableau errors avec des objets UrlValidationError. Une application peut ainsi examiner les erreurs de validation, notamment pour des données saisies dans un formulaire.
Les deux classes suivent un modèle immuable. Les méthodes withScheme(), withPath(), withQuery(), withPort() et withFragment() renvoient un nouvel objet et préservent l'instance initiale. La sérialisation passe par toString(), toRawString() ou toAsciiString(). Uri\WhatWg\Url::equals() et la méthode équivalente du modèle RFC 3986 comparent les valeurs normalisées. UriComparisonMode::IncludeFragment permet d'inclure le fragment dans cette comparaison.
PHP recommande ces classes pour le nouveau code et les migrations qui n'ont pas besoin de conserver le comportement de parse_url(). Valider une URL avec un analyseur puis la récupérer avec un autre peut créer une faille de sécurité. L'extension URI fournit aux applications PHP une base commune pour analyser, valider, comparer et modifier les URI selon des standards définis.




Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.