Black Friday Spécial Anniversaire: -30% sur la formation et -10% sur les services Demandez un devis


La nouvelle extension URI de PHP 8.5 : Une révolution pour l'analyse des URL

· Oskar Stark · Temps de lecture: 3 minutes
PHP 8.5 URI extension

PHP 8.5 introduit une nouvelle extension URI puissante qui modernise la gestion des URL. Grâce au support des standards RFC 3986 et WHATWG, la nouvelle classe Uri fournit des objets immuables, des interfaces fluides et une validation appropriée, résolvant ainsi toutes les limites de la fonction historique parse_url(). Cet articl présente des exemples pratiques avant/après et explique quand utiliser chaque standard.

Le problème de parse_url()

Depuis des années, les développeurs PHP s'appuient sur parse_url() pour l'analyse des URL. En dépit de son aspect pratique, cette fonction présente plusieurs limites :

$url = 'https://api.example.com:8080/users?id=123&sort=name#profile';
$parts = parse_url($url);

echo $parts['scheme'];    // https
echo $parts['host'];      // api.example.com
echo $parts['port'];      // 8080
echo $parts['path'];      // /users
echo $parts['query'];     // id=123&sort=name
echo $parts['fragment'];  // profile

Ses principales limites :

  • Elle renvoie un tableau associatif plutôt qu'un objet

  • Ses capacités de validation sont limitées

  • Aucune méthode n'est intégrée pour construire ou modifier des URL

  • Une gestion incohérente des cas particuliers

  • Aucun support pour les patterns modernes de manipulation d'URL

Introduction aux classes Uri

La nouvelle extension URI de PHP 8.5 fournit deux implémentations conformes aux standards :

use Uri\Rfc3986\Uri;

$uri = new Uri('https://api.example.com:8080/users?id=123&sort=name#profile');

echo $uri->getScheme();    // https
echo $uri->getHost();      // api.example.com
echo $uri->getPort();      // 8080
echo $uri->getPath();      // /users
echo $uri->getQuery();     // id=123&sort=name
echo $uri->getFragment();  // profile

Voici les implémentations disponibles :

  • Uri\Rfc3986\Uri - Pour l'analyse URI conforme à RFC 3986 (URI à usage général)

  • Uri\WhatWg\Url - Pour le standard WHATWG URL (URL compatibles navigateur)

Les deux classes offrent :

  • Des objets URL immuables avec des méthodes getter et setter

  • Une analyse conforme aux standards (RFC 3986 ou WHATWG)

  • Une interface fluide pour la manipulation d'URL

  • Une meilleure gestion des erreurs et de la validation

  • Un support intégré pour la construction et la modification d'URL

La construction et la modification d'URL

L'une des fonctionnalités les plus puissantes est l'interface fluide pour la manipulation d'URL :

Avant :

$url = 'https://example.com/api/v1/users';
$parts = parse_url($url);

// Ajouter des paramètres de requête nécessite un travail manuel
$parts['query'] = 'page=2&limit=20';

// Reconstruire l'URL est fastidieux
$newUrl = $parts['scheme'] . '://' . 
          $parts['host'] . 
          $parts['path'] . 
          '?' . $parts['query'];

echo $newUrl; // https://example.com/api/v1/users?page=2&limit=20

Après :

use Uri\Rfc3986\Uri;

$uri = new Uri('https://example.com/api/v1/users');

// L'interface fluide rend les modifications élégantes
$newUri = $uri
    ->withQuery('page=2&limit=20')
    ->withFragment('results');

echo $newUri->toString(); 
// https://example.com/api/v1/users?page=2&limit=20#results

La modification des composants d'URL

La nature immuable des objets Uri rend les modifications de composants fiables et prévisibles :

Avant :

$url = 'http://example.com/old-path';
$parts = parse_url($url);

// Reconstruction manuelle pour chaque changement
$parts['scheme'] = 'https';
$parts['path'] = '/new-path';
$parts['query'] = 'updated=true';

$newUrl = $parts['scheme'] . '://' . 
          $parts['host'] . 
          $parts['path'] . 
          '?' . $parts['query'];

echo $newUrl; // https://example.com/new-path?updated=true

Après :

use Uri\Rfc3986\Uri;

$uri = new Uri('http://example.com/old-path');

$newUri = $uri
    ->withScheme('https')
    ->withPath('/new-path')
    ->withQuery('updated=true');

echo $newUri->toString(); // https://example.com/new-path?updated=true

Les principaux avantages

1. La sécurité des types et le support IDE

La classe Uri fournit des indices de type complets et un support d'autocomplétion dans les IDE modernes, rendant le développement plus rapide et moins sujet aux erreurs.

2. L'immuabilité

Chaque modification retourne une nouvelle instance Uri, évitant les effets secondaires non intentionnels et rendant le code plus prévisible.

3. Une meilleure validation

La classe Uri valide les URL pendant la construction et la modification, ce qui permet de détecter les erreurs dès le début plutôt que de produire des URL incorrectes.

4. La conformité avec le RFC

La conformité complète avec le RFC 3986 garantit un comportement cohérent pour différents formats d'URL et dans les cas particuliers.

5. Des résultats normalisés et bruts

La classe Uri fournit des méthodes de restitution normalisées et brutes, ce qui permet de contrôler la représentation de l'URL :

use Uri\Rfc3986\Uri;

$uri = new Uri('HTTPS://thephp.foundation:443/sp%6Fnsor/');

echo $uri->toString();    
// https://thephp.foundation/sponsor/ (normalisé)

echo $uri->toRawString(); 
// HTTPS://thephp.foundation:443/sp%6Fnsor/ (entrée brute préservée)

Nos conseils de migration

Bien que la classe Uri soit préférable pour le nouveau code, il n'est pas nécessaire de modifier immédiatement les appels à la fonction parse_url() existants. Utilisez la classe Uri pour :

  • Les nouveaux projets et fonctionnalités

  • Le code manipulant fréquemment des URL

  • Les API qui travaillent avec des structures d'URL complexes

  • Les situations nécessitant une validation stricte des URL

  • Quand il faut choisir entre les standards RFC 3986 et WHATWG

Choisir entre RFC 3986 et WHATWG

Utilisez Uri\Rfc3986\Uri quand :

  • Vous travaillez avec des URI à usage général (FTP, file, schémas personnalisés)

  • Vous avez besoin d'être conforme avec le RFC 3986 pour les services backend

  • Vous analysez des URI non-web

Choisissez Uri\WhatWg\Url quand :

  • Vous construisez des applications web qui interagissent avec les navigateurs

  • Vous avez besoin d'une analyse d'URL compatible avec le navigateur

  • Vous travaillez avec des URL HTTP/HTTPS que les utilisateurs verront

N'oubliez pas la performance !

La classe Uri présente un surcoût de performance minimal par rapport à la fonction parse_url(). Pour la plupart des applications, les avantages dépassent largement toute différence de performance négligeable. Si vous analysez des millions d'URL par seconde, effectuez des benchmarks de votre cas d'utilisation spécifique.

Conclusion

L'extension URI de PHP 8.5 représente une avancée significative dans la gestion des URL. Les nouvelles classes Uri (Uri\Rfc3986\Uri et Uri\WhatWg\Url) fournissent des approches modernes et conformes aux standards qui rendent l'analyse, la manipulation et la validation des URL plus intuitives et fiables.

Que vous construisiez des API, des web scrapers ou toute application qui utilise des URL, l'extension URI rendra votre code plus propre et plus facile à maintenir. Cerise sur le gâteau : elle est directement incluse avec PHP 8.5 - aucune installation supplémentaire n'est donc requise !

Commencez dès aujourd'hui à explorer l'extension URI dans vos projets PHP 8.5 et découvrez la différence qu'une gestion appropriée des URL peut apporter !

Ressources officielles

Important : L'extension URI est fournie avec PHP 8.5 et toujours disponible - aucune installation séparée ou exigence ext-uri n'est nécessaire !

Sources

Note : L'extension URI est disponible dans PHP 8.5+ et est fournie par défaut. Assurez-vous que votre environnement est à jour avant d'utiliser ces fonctionnalités.

Tu souhaites approfondir tes connaissances ?

SensioLabs propose des sessions de formation personnalisables pour t'aider, toi et ton équipe, à maîtriser les nouvelles fonctionnalités de PHP 8.5, y compris l'extension URI et d'autres bonnes pratiques PHP modernes.

Cela pourrait aussi vous intéresser

Open in new tab
Silas Joisten

Le piège des onglets: pourquoi forcer l'ouverture de nouveaux onglets est une mauvaise pratique en UX

Nous l'avons tous fait — ajouter target="_blank" à un lien pour « aider les utilisateurs » à rester sur notre site. Mais ce qui semble être une commodité inoffensive crée souvent de la confusion, diminue l'accessibilité et introduit des risques de sécurité cachés.

En savoir plus
3 dog heads
Mathieu Santostefano

Venez avec votre propre client HTTP

Libérez-vous des dépendances rigides de vos SDK PHP. Dans cet article, apprenez à utiliser les normes PSR-7, PSR-17 et PSR-18, ainsi que la bibliothèque php-http/discovery, pour permettre à vos utilisateurs d'utiliser le client HTTP de leur choix, qu'il s'agisse de Guzzle, de Symfony HttpClient ou d'un autre. Un incontournable pour les développeurs PHP et Symfony.

En savoir plus
Blue sign on a building with several Now What? letters
Thibaut Chieux

Comment prioriser les messages lors du développement d'applications asynchrones avec Symfony Messenger

Le traitement asynchrone offre des avantages tels que la découplage des processus et des temps de réponse plus rapides, mais la gestion des priorités des messages peut s'avérer complexe. Pour traiter des tâches allant de la réinitialisation de mot de passe à des exports complexes, il est essentiel de garantir la livraison rapide des messages critiques. Cet article examine les problèmes fréquents liés au traitement asynchrone et propose des solutions avec Symfony Messenger pour optimiser votre application sans refonte majeure.

En savoir plus
PHP 8.5
Oskar Stark

Quoi de neuf dans PHP 8.5 ? Un aperçu complet

PHP 8.5 sort en novembre 2025 et apporte plusieurs nouvelles fonctionnalités utiles et des améliorations. Cette nouvelle version se concentre sur l'amélioration de l'expérience développeur, de nouvelles fonctions utilitaires et de meilleures capacités de débogage.

En savoir plus
Two images: on the left many cars stuck in a traffic jam with the sign "All directions" above, on the right a blue car moving forward alone on the highway with the sign "Service Subscriber" and a Symfony logo above
Steven Renaux

Les Lazy Services de Symfony : Boostez votre DX en utilisant les Service Subscribers

Optimisez la performance de votre application Symfony et l'expérience développeur ! Apprenez à utiliser les Service Subscribers et les attributs de chargement différé des services afin de réduire l'instanciation rapide, de simplifier les dépendances et de créer un code modulaire et maintenable.

En savoir plus
the surface of the earth seen from the space with city lights forming networks
Imen Ezzine

Les verbes HTTP : votre Guide Complet

Apprenez les bases des verbes HTTP : GET, POST, PUT, DELETE, et plus encore. Cet article vous explique leur fonctionnement, leurs utilisations et les conséquences en matière de sécurité.

En savoir plus
Toy factory production line
Silas Joisten

Boostez vos tests Symfony avec Zenstruck Foundry

Zenstruck Foundry a révolutionné notre manière d’écrire des tests dans Symfony. Dans cet article, vous apprendrez comment des fabriques expressives, des données de test isolées et une expérience développeur plus fluide nous ont permis d’optimiser nos flux de tests et d’améliorer la productivité.

En savoir plus
Domain Driven Design practical approach
Silas Joisten

Appliquer le Domain-Driven Design à PHP et Symfony : Un Guide Pratique

Le Domain-Driven Design (DDD) s'applique à Symfony grâce à des Value Objects, des dépôts et des contextes bornés. Dans cet article, découvrez les étapes concrètes pour construire des applications PHP évolutives.

En savoir plus
Photo speaker meetup AI Symfony
Jules Daunay

Symfony et l’IA : la vidéo de l’événement est disponible

Et si on parlait de Symfony et l’intelligence artificielle (IA) ? C’était le thème de l’événement exclusif organisé le 3 octobre dernier par SensioLabs en partenariat avec Codéin. Avec en prime un retour d’expérience d’un projet de développement combinant Symfony et l’IA. Si vous avez manqué l’événement, retrouvez la vidéo, aujourd’hui disponible en accès libre sur notre chaîne Youtube.

En savoir plus
2025 a year of celebrations for PHP with windows about API Platform, PHP, AFUP and Symfony
Jules Daunay

2025 : l’année des anniversaires pour PHP, l’AFUP, Symfony et API Platform

En 2025, plusieurs anniversaires majeurs vont avoir lieu. Les 20 ans de Symfony bien sûr, mais aussi les 30 ans de PHP, les 25 ans de l’AFUP et les 10 ans d’API Platform. Pour SensioLabs, c’est un jalon majeur qui montre la pérennité des technologies de notre écosystème. Nous sommes très heureux de fêter ces anniversaires avec la communauté pendant toute l’année.

En savoir plus
Blue ElePHPant on a computer
Imen Ezzine

Optimisez Votre Code PHP : 8 Fonctions à Connaître pour Manipuler les Tableaux avec Efficacité

Devenir un excellent développeur PHP nécessite une maîtrise parfaite de la manipulation des tableaux. Ces structures sont incontournables en PHP, que ce soit pour stocker temporairement des données, les organiser ou les traiter avant leur enregistrement dans une base de données. En maîtrisant leur fonctionnement, vous serez en mesure de gérer et de manipuler vos informations de manière plus efficace et optimisée.

En savoir plus
Grey Cargo Plane with a Blue Sky
Rémi Brière

L'Agilité en entreprise - 1. Le Culte du Cargo

L'agilité ne se résume pas à des rituels et à des outils. Dans ce premier article de notre série Scrum, nous explorons le phénomène du culte du cargo et la manière dont l'imitation aveugle peut entraver la véritable transformation Agile.

En savoir plus
SemVer vs. CalVer
Silas Joisten

SemVer vs. CalVer : Quelle stratégie de versioning choisir ?

SemVer garantit la stabilité des bibliothèques, tandis que CalVer synchronise les projets avec les cycles de publication. Découvrez les principales différences et les meilleurs cas d’utilisation pour optimiser votre stratégie de versioning.

En savoir plus
Image of a desk with a laptop and monitor
Oskar Stark

Introduction à PIE : Le nouvel installateur moderne pour les extensions PHP

Découvrez PIE, le nouvel installateur d'extensions PHP qui simplifie leur gestion avec un flux de travail moderne inspiré de Composer. Une alternative innovante et moderne à PECL pour les développeurs PHP.

En savoir plus
DDD
Silas Joisten

Comprendre le Domain-Driven Design : Une approche pratique pour une architecture logicielle moderne

Découvrez les principes et les modèles du Domain-Driven Design (DDD) tels que le langage ubiquitaire, les agrégats et les contextes délimités. Apprenez comment le DDD s’intègre parfaitement aux projets PHP et Symfony, vous aidant à aligner les logiciels avec les besoins métier.

En savoir plus
Image