Créa-blog

#100JoursPourCoder
Projet Créa-code

Ressources pour développeur web

Théme de la semaine : Le Frontend

Extension URI PHP 8.5 : enfin des URL propres

Temps de lecture estimé : 11 minutes
Accueil PHP 8 Extension URI PHP 8.5 : enfin des URL propres

Pendant longtemps, manipuler des URL en PHP a ressemblé à un petit jeu d’équilibriste. On découpait des chaînes de caractères, on utilisait parse_url(), parfois filter_var(), et on bricolait le reste à la main. Ça fonctionnait… jusqu’au jour où une URL un peu plus complexe venait tout casser. C’est à ce moment qu’intervient URI PHP avec la version 8.5.

  • Comprendre les URL en PHP, avec une approche moderne qui évite les erreurs classiques et rend le code plus lisible dès les premiers projets.
  • Gagner en confort et en sécurité en construisant et modifiant des URL propres, fiables et cohérentes, avec des cas concrets comme les formulaires, la pagination ou les redirections.
  • Adopter de bonnes pratiques dès le début, alignées avec l’évolution de PHP 8.5, pour écrire un code propre, maintenable et professionnel.

Avec PHP 8.5, une nouveauté très attendue arrive enfin : une extension native URI, pensée pour représenter, analyser et manipuler des URL de manière propre, lisible et surtout sécurisée. Une vraie évolution dans la façon de travailler avec les adresses web en PHP.

Dans ce chapitre, nous allons prendre le temps de comprendre ce que cette extension apporte, pourquoi elle change la donne, et comment l’utiliser pas à pas, même si vous débutez en PHP. L’objectif est simple : à la fin, les URL ne seront plus un mystère pour vous.

Avant PHP 8.5 : pourquoi les URL étaient un problème

Pour bien comprendre l’intérêt de cette extension URI PHP 8.5, il faut d’abord revenir quelques années en arrière.

En PHP, une URL était avant tout… une chaîne de caractères. Rien de plus. Pour récupérer le protocole, le nom de domaine ou le chemin, on utilisait parse_url(). Pour vérifier si l’URL était valide, on ajoutait un filter_var() avec FILTER_VALIDATE_URL. Et pour modifier une partie de l’URL, on reconstruisait tout à la main.

Ce fonctionnement posait plusieurs soucis. D’abord, le code devenait vite difficile à lire. Ensuite, la moindre erreur de concaténation pouvait produire une URL invalide. Enfin, il n’existait aucune représentation “objet” d’une URL, contrairement à ce qu’on trouve déjà dans d’autres langages modernes. C’est exactement ce vide que PHP 8.5 vient combler.

Qu’est-ce que l’extension URI PHP 8.5

L’extension URI introduite en PHP 8.5 permet de manipuler les URL sous forme d’objets. Une URL n’est plus une simple chaîne de caractères, mais une entité structurée, avec des propriétés bien définies : schéma, hôte, port, chemin, paramètres, fragment.

Concrètement, PHP fournit désormais des classes dédiées pour représenter une URI, accéder à ses différentes parties et les modifier sans tout casser.

Cela apporte trois avantages majeurs. Le code devient plus lisible, plus sûr et plus logique. On arrête de découper des chaînes, on manipule des objets. C’est une vraie montée en gamme pour le langage.

URI, URL et débutants : remettons les bases à plat

Avant d’aller plus loin, prenons un instant pour clarifier un point important.

  • Une URI (Uniform Resource Identifier) est un terme générique.
  • Une URL (Uniform Resource Locator) est un type particulier d’URI.

Dans la pratique, quand on parle d’URL, on parle bien d’URI complètes, comme https://blog.crea-troyes.fr/article.

L’extension URI de PHP 8.5 travaille donc sur ce concept large, ce qui permet de gérer aussi bien des URL web classiques que d’autres formes d’identifiants.

Si cette distinction vous paraît floue, rassurez-vous. Dans le cadre de ce tutoriel, vous pouvez retenir une chose simple : PHP 8.5 vous donne enfin un vrai outil pour gérer vos URL proprement.

Pourquoi cette extension change votre façon de coder

Avec cette extension, on ne “bricole” plus une URL. On la construit, on l’analyse et on la modifie de manière contrôlée.

Par exemple, au lieu d’extraire le domaine à la main, on demande simplement à l’objet URI de nous le donner. Au lieu de concaténer des paramètres GET, on les ajoute proprement. PHP s’occupe du reste. C’est exactement la même logique que lorsque vous êtes passé des tableaux associatifs aux objets. Le confort est immédiat, même pour un débutant.

Consultez notre tutoriel pour Débuter la Programmation Orienté Objet en PHP.

Beaucoup de développeurs PHP ont longtemps rêvé de cette fonctionnalité en voyant ce que proposaient JavaScript ou Java. PHP 8.5 arrive un peu tard, certes, mais il arrive enfin avec une implémentation solide et cohérente.

Comment créer une URI en PHP 8.5

Entrons maintenant dans le concret. Avec PHP 8.5, vous pouvez créer une URI à partir d’une simple chaîne de caractères. PHP se charge de la découper et de vérifier sa cohérence.

Voici un premier exemple très simple :

<?php

use Php\Uri\Uri;

$uri = Uri::fromString('https://blog.crea-troyes.fr/apprendre-php');

echo $uri->getHost();

Dans cet exemple, vous créez un objet URI à partir d’une URL. Ensuite, vous récupérez uniquement le nom de domaine. Pas de regex, pas de découpage manuel, pas de piège.

Même si vous débutez, le code reste lisible. On comprend l’intention sans lire les commentaires.

Comprendre la structure d’une URI

Une URI est composée de plusieurs parties distinctes. L’extension URI PHP 8.5 permet d’y accéder individuellement.

Prenons cette URL comme exemple :

https://example.com:8080/produits?id=42#avis

Elle contient un schéma, un hôte, un port, un chemin, une requête et un fragment. Chaque élément peut être lu indépendamment.

Voici comment PHP vous permet de faire cela :

<?php

// Création d’un objet URI à partir d’une URL complète sous forme de chaîne de caractères
// PHP analyse automatiquement chaque partie de l’URL (protocole, domaine, port, etc.)
$uri = Uri::fromString('https://example.com:8080/produits?id=42#avis');

// Récupère le schéma de l’URL, c’est-à-dire le protocole utilisé (http, https, ftp, etc.)
echo $uri->getScheme();

// Récupère le nom de domaine (hôte) de l’URL
echo $uri->getHost();

// Récupère le port utilisé dans l’URL (ici 8080)
// Si aucun port n’est précisé, cette méthode retourne null
echo $uri->getPort();

// Récupère le chemin de l’URL, c’est-à-dire la partie après le domaine
echo $uri->getPath();

// Récupère la chaîne de paramètres (query string), ici "id=42"
echo $uri->getQuery();

// Récupère le fragment de l’URL, utilisé pour cibler une section précise de la page
// Le caractère # n’est pas inclus dans la valeur retournée
echo $uri->getFragment();

Chaque méthode retourne une valeur claire, sans ambiguïté. Vous savez exactement ce que vous manipulez, ce qui est essentiel quand on apprend.

Une approche sécurisée par conception

Un autre point important, surtout pour les débutants, concerne la sécurité.

Les erreurs liées aux URL sont fréquentes : caractères non échappés, paramètres mal encodés, injections involontaires. En utilisant une extension native pensée pour ça, PHP limite ces risques.

Lorsque vous modifiez une partie de l’URI, PHP s’assure que le résultat final reste valide. Vous évitez ainsi de générer des URL cassées sans même vous en rendre compte.

Modifier une URI PHP sans tout casser

L’un des changements les plus importants introduits par l’extension URI de PHP 8.5 est la notion d’immutabilité. Ce mot peut sembler intimidant au premier abord, mais le principe est en réalité très simple.

Une URI est considérée comme un objet immuable. Cela signifie qu’une fois créée, elle ne change pas. Si vous souhaitez modifier une partie de l’URL, PHP crée une nouvelle URI, en laissant l’originale intacte.

Pourquoi ce choix ? Parce que c’est plus sûr, plus prévisible et beaucoup moins source de bugs, surtout quand on débute.

Exemple simple de modification d’une URI avec PHP

Prenons une URL de départ très classique :

<?php

use Php\Uri\Uri;

$uri = Uri::fromString('https://example.com/articles');

Supposons maintenant que vous souhaitiez changer le chemin pour aller vers une page différente. Depuis PHP 8.5, vous ne modifiez pas l’objet directement. Vous créez une nouvelle version.

<?php

$newUri = $uri->withPath('/articles/php-8-5');

À ce stade, $uri contient toujours l’URL originale, et $newUri contient la version modifiée. C’est une sécurité énorme, notamment dans les projets où une même URL est utilisée à plusieurs endroits.

Ajouter des paramètres GET proprement

C’est probablement l’un des cas les plus fréquents en PHP. Avant PHP 8.5, on concaténait les paramètres à la main, souvent avec des ?, des &, et un soupçon d’angoisse.

Avec l’extension URI, cette étape devient beaucoup plus propre :

<?php

$uri = Uri::fromString('https://example.com/recherche');

$newUri = $uri->withQuery('q=php+8.5&page=1');

echo $newUri->toString();

Le résultat est une URL parfaitement valide, bien encodée, et surtout facile à relire. Le résultat affiché sera donc l’URL complète suivante :

https://example.com/recherche?q=php+8.5&page=1

L’URI de départ reste inchangée, et PHP 8.5 génère une nouvelle URL en ajoutant proprement les paramètres de recherche et de pagination.

Ce qui est intéressant, c’est que vous pouvez aussi partir d’une URI existante modifier uniquement un paramètre, sans écraser les autres. PHP s’occupe de l’assemblage.

Comprendre la méthode withQuery

La méthode withQuery() remplace entièrement la partie query de l’URI. Si vous souhaitez gérer les paramètres un par un, la bonne pratique consiste à manipuler les données avant de les injecter dans l’URI.

Voici une approche très pédagogique :

<?php

$params = [
    'q' => 'uri php',
    'page' => 2
];

$queryString = http_build_query($params);

$uri = Uri::fromString('https://example.com/recherche');
$newUri = $uri->withQuery($queryString);

echo $newUri->toString();

Cette combinaison entre PHP classique et l’extension URI est idéale pour les débutants. Vous restez sur des concepts simples tout en bénéficiant d’une structure moderne.

Le résultat affiché sera l’URL suivante :

https://example.com/recherche?q=uri+php&page=2

La fonction http_build_query() encode automatiquement les espaces en +, puis l’extension URI de PHP 8.5 assemble une URL valide et propre sans aucune concaténation manuelle.

Modifier le domaine ou le protocole

Autre cas fréquent : passer d’un environnement local à un environnement de production. Avec PHP 8.5, cette opération devient très lisible.

<?php

$uri = Uri::fromString('http://localhost/projet');

$secureUri = $uri
    ->withScheme('https')
    ->withHost('www.monsite.fr');

echo $secureUri->toString();

Le résultat affiché sera l’URL suivante :

https://www.monsite.fr/projet

Le protocole a été remplacé par https et le domaine par www.monsite.fr, tandis que le chemin /projet a été conservé automatiquement par l’URI en PHP 8.5.

Le code se lit presque comme une phrase. On comprend immédiatement l’intention, ce qui est essentiel quand on apprend ou quand on relit son code plusieurs mois plus tard.

Une URI comme objet, pas comme texte

C’est probablement le plus grand changement de mentalité à adopter.

En PHP 8.5, une URI n’est plus un simple texte à manipuler. C’est un objet avec des règles, des méthodes et une logique interne. Cela peut surprendre au début, mais c’est aussi ce qui rend le code plus robuste.

Dès que vous commencez à raisonner en termes d’objets plutôt qu’en chaînes de caractères, beaucoup d’erreurs disparaissent naturellement.

Cas concret : générer une URL dynamique pour un article

Imaginons un cas très courant sur un blog comme le Créa-Blog. Vous avez un identifiant d’article et vous souhaitez générer une URL propre.

<?php

$articleId = 42;

$uri = Uri::fromString('https://blog.crea-troyes.fr/article');
$newUri = $uri->withQuery('id=' . $articleId);

echo $newUri->toString();

Le résultat affiché sera l’URL suivante :

https://blog.crea-troyes.fr/article?id=42

L’identifiant de l’article est ajouté proprement en paramètre de requête, sans modifier l’URL de base, conformément au fonctionnement immuable des URI en PHP 8.5.

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?

Ce code est volontairement simple. Il permet à un débutant de comprendre immédiatement le lien entre les données PHP et l’URL finale, tout en utilisant les bonnes pratiques introduites par PHP 8.5.

Gérer les fragments d’URL

Les fragments, souvent utilisés pour naviguer à l’intérieur d’une page, sont aussi pris en charge.

<?php

$uri = Uri::fromString('https://example.com/documentation');
$newUri = $uri->withFragment('installation');

echo $newUri->toString();

Le résultat affiché sera l’URL suivante :

https://example.com/documentation#installation

Le fragment installation est ajouté à la fin de l’URL, permettant de cibler directement une section précise de la page, sans modifier le reste de l’URI.

Vous obtenez ainsi une URL complète, sans jamais avoir à ajouter manuellement le caractère #.

Pourquoi cette extension est idéale pour les débutants

Ce qui rend l’extension URI de PHP 8.5 particulièrement intéressante pour les débutants, c’est qu’elle force de bonnes habitudes dès le départ. On apprend à structurer, à nommer clairement, à éviter les bricolages.

Plutôt que d’accumuler des astuces fragiles, on construit des bases solides. Et c’est exactement ce que l’on recherche quand on apprend PHP sérieusement.

Intégrer l’extension URI dans un projet PHP réel

Jusqu’ici, nous avons manipulé des URI dans des exemples isolés. C’est utile pour comprendre, mais la vraie question reste la même : à quoi cela sert-il concrètement dans un site ou une application PHP ?

La réponse est simple : partout où une URL est construite dynamiquement. Formulaires, pagination, redirections, filtres, SEO, API… Les URI sont omniprésentes, même si on ne s’en rend pas toujours compte.

Cas pratique : traiter une URL issue d’un formulaire

Imaginons un formulaire de recherche très classique. L’utilisateur saisit un mot-clé, et vous souhaitez rediriger vers une page avec les paramètres dans l’URL.

Avant PHP 8.5, ce genre de code devenait vite brouillon. Avec l’extension URI, tout reste propre et compréhensible.

<?php

use Php\Uri\Uri;

$keyword = $_GET['q'] ?? '';

$baseUri = Uri::fromString('https://example.com/recherche');

$params = [
    'q' => $keyword,
    'source' => 'formulaire'
];

$queryString = http_build_query($params);

$resultUri = $baseUri->withQuery($queryString);

header('Location: ' . $resultUri->toString());
exit;

Le résultat dépendra de la valeur transmise dans l’URL via le paramètre q.

Cas le plus courant, si l’utilisateur accède à la page avec l’URL suivante :

https://example.com/page.php?q=php

Alors la redirection effectuée par ce code sera :

https://example.com/recherche?q=php&source=formulaire

Le navigateur est automatiquement redirigé vers cette URL grâce à l’en-tête HTTP Location.

Si aucun paramètre q n’est présent et si l’utilisateur accède simplement à la page sans paramètre :

https://example.com/page.php

La redirection sera alors :

https://example.com/recherche?q=&source=formulaire

Dans tous les cas, l’extension URI de PHP 8.5 garantit une URL finale valide, proprement construite, sans concaténation manuelle et sans risque d’erreur de syntaxe.

Chaque étape est claire. Vous partez d’une URL de base, vous construisez vos paramètres, puis vous générez une URL finale valide. Même un débutant peut suivre le raisonnement sans se perdre.

Séparer les responsabilités dans votre code

Un autre avantage important de l’extension URI en PHP 8.5, c’est qu’elle encourage une meilleure organisation du code.

Au lieu d’avoir des concaténations d’URL dispersées un peu partout, vous centralisez la logique de construction des liens. Cela rend le code plus lisible, mais aussi plus simple à maintenir. Si demain l’URL de base change, vous modifiez un seul endroit. C’est un gain de temps énorme sur le long terme.

Cas concret : pagination propre et lisible

La pagination est un excellent exemple pour illustrer l’intérêt des URI en PHP 8.5. Supposons que vous soyez sur une page de liste d’articles, avec un paramètre page.

<?php

$currentPage = 3;

$uri = Uri::fromString('https://blog.crea-troyes.fr/articles');

$newUri = $uri->withQuery('page=' . $currentPage);

echo $newUri->toString();

Le résultat affiché sera l’URL suivante :

https://blog.crea-troyes.fr/articles?page=3

Le paramètre de pagination est ajouté proprement à l’URL, ce qui permet d’indiquer clairement la page courante sans modifier le chemin de base des articles.

Le code est volontairement simple. Ce qui compte ici, c’est la clarté. Vous voyez immédiatement ce que représente l’URL générée, sans avoir à relire des concaténations complexes.

Pour aller plus loin : La pagination avec PHP et MySQL

Créer des URL SEO-friendly plus facilement

Quand on débute, le SEO peut sembler flou. Pourtant, la structure des URL joue un rôle important. Avec l’extension URI PHP, vous pouvez construire des URL propres et cohérentes, sans risquer d’erreurs de syntaxe.

<?php

$slug = 'extension-uri-php-8-5';

$uri = Uri::fromString('https://blog.crea-troyes.fr');
$newUri = $uri->withPath('/articles/' . $slug);

echo $newUri->toString();

Ce genre de code est parfait pour un blog ou un CMS. Vous contrôlez précisément chaque partie de l’URL, ce qui est excellent pour le référencement naturel.

Le résultat affiché sera l’URL suivante :

https://blog.crea-troyes.fr/articles/extension-uri-php-8-5

Le chemin de l’URI est remplacé pour pointer vers l’article correspondant, tout en conservant automatiquement le domaine et le protocole.

Comprendre l’intérêt pour les API

Même si vous débutez, il est probable que vous utilisiez ou utiliserez un jour une API.

Les API reposent massivement sur les URL. L’extension URI en PHP 8.5 permet de construire des endpoints propres, sans erreurs, et de gérer les paramètres de requête de manière fiable.

<?php

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

$params = [
    'limit' => 10,
    'offset' => 20
];

$newUri = $uri->withQuery(http_build_query($params));

echo $newUri->toString();

Encore une fois, le code reste simple, lisible, et surtout prévisible. Le résultat affiché sera l’URL suivante :

https://api.example.com/v1/users?limit=10&offset=20

Les paramètres limit et offset sont ajoutés proprement à l’URL, ce qui permet de paginer une requête API de manière claire et fiable, sans manipulation manuelle de chaînes de caractères.


Ce qui est particulièrement intéressant avec cette extension, c’est qu’elle aide à comprendre des concepts fondamentaux de la programmation moderne : immuabilité, séparation des responsabilités, lisibilité du code.

Même si ces termes semblent abstraits au début, vous les appliquez sans vous en rendre compte. Et c’est exactement ce que l’on attend d’un bon outil pédagogique.

Bonnes pratiques pour bien utiliser les URI en PHP 8.5

Quand on découvre l’extension URI de PHP 8.5, l’erreur la plus fréquente consiste à vouloir tout réécrire immédiatement. C’est tentant, surtout quand on réalise à quel point la manipulation des URL devient plus agréable. Pourtant, la meilleure approche reste progressive.

L’idéal est de commencer par les zones sensibles de votre application. Les redirections, les formulaires, la pagination ou les appels API sont d’excellents candidats. Ce sont précisément les endroits où les erreurs d’URL coûtent cher, que ce soit en bugs, en sécurité ou en référencement.

Autre bonne habitude à prendre dès le début : toujours considérer une URI comme un objet. Évitez de la reconvertir en chaîne trop tôt. Tant que vous devez la modifier ou l’analyser, gardez-la sous forme d’objet. Vous ne la transformez en texte qu’au moment final, par exemple pour un affichage ou un en-tête HTTP.

Les erreurs classiques quand on débute

L’une des erreurs les plus courantes consiste à oublier le principe d’immutabilité. Beaucoup de débutants s’attendent à ce que l’URI se modifie “toute seule”. En réalité, chaque méthode withSomething() retourne une nouvelle URI. Si vous ne stockez pas le résultat, la modification est simplement perdue.

Voici un exemple typique d’erreur :

<?php

$uri = Uri::fromString('https://example.com');
$uri->withPath('/contact');

echo $uri->toString();

Dans ce cas précis, l’URL affichée reste inchangée. La bonne approche consiste à récupérer la nouvelle instance.

<?php

$uri = Uri::fromString('https://example.com');
$uri = $uri->withPath('/contact');

echo $uri->toString();

Ce petit détail peut sembler anodin, mais il est fondamental pour bien comprendre le fonctionnement de PHP 8.5.

Faut-il abandonner parse_url et les anciennes méthodes ?

C’est une question légitime, surtout quand on apprend.

La réponse est nuancée. Les fonctions comme parse_url() ou http_build_query() restent utiles et parfaitement valides. L’extension URI ne les remplace pas totalement, elle les complète.

Dans un projet existant, vous pouvez continuer à utiliser ces fonctions là où elles sont suffisantes. En revanche, dès que la logique devient plus complexe, l’extension URI devient rapidement plus claire et plus sécurisée.

En d’autres termes, PHP 8.5 ne vous impose rien. Il vous propose simplement un meilleur outil.


L’arrivée de l’extension URI en PHP 8.5 marque un tournant discret, mais significatif. PHP continue de se moderniser, non pas en cassant ce qui existe, mais en ajoutant des briques solides là où il en manquait.

Cette approche rassure, notamment pour les débutants. On apprend un langage qui évolue dans le bon sens, avec des concepts modernes, tout en restant accessible. C’est exactement ce qui fait la force de PHP depuis des années.

Pour quelqu’un qui apprend PHP aujourd’hui, commencer directement avec l’extension URI est un énorme avantage. Vous évitez de prendre de mauvaises habitudes, comme la manipulation excessive de chaînes ou les concaténations hasardeuses.

Vous apprenez à raisonner en termes de structure, de responsabilité et de lisibilité. Et ces compétences vous serviront bien au-delà de PHP.


L’extension URI PHP ne fait pas de bruit, mais elle change profondément la manière de travailler avec les URL. Là où l’on bricolait autrefois, on construit désormais des URI claires, sûres et faciles à maintenir. Ce n’est pas une révolution spectaculaire, mais c’est une évolution intelligente.

Pour un débutant, c’est une excellente nouvelle. Vous pouvez apprendre dès le départ avec des outils modernes, pensés pour éviter les erreurs et rendre le code plus compréhensible. Pour un développeur plus expérimenté, c’est l’occasion de simplifier des pans entiers de code souvent négligés.

Finalement, PHP 8.5 continue ce qu’il fait de mieux depuis quelques versions : rendre le langage plus cohérent, plus lisible et plus agréable à utiliser. Et si vous preniez l’habitude, dès maintenant, de traiter vos URL non plus comme de simples chaînes, mais comme de véritables objets à part entière ?