W3docs

substr()

La fonction substr() en PHP permet d'extraire une partie d'une chaîne de caractères, utile pour le traitement de texte.

La fonction substr() retourne une tranche d'une chaîne — les caractères compris entre une position de départ et une longueur optionnelle. C'est l'un des outils de manipulation de chaînes les plus utilisés en PHP : supprimer des préfixes, extraire les N premiers caractères d'un libellé, lire un champ de largeur fixe ou récupérer une extension de fichier revient à appeler substr(). Cette page couvre la syntaxe, tous les comportements des arguments $start et $length (y compris les valeurs négatives), les cas limites qui piègent les développeurs, et quand utiliser mb_substr() à la place.

Syntaxe

substr(string $string, int $offset, ?int $length = null): string
ParamètreDescription
$stringLa chaîne d'entrée à partir de laquelle extraire.
$offsetPosition de départ basée sur zéro. Une valeur négative compte depuis la fin de la chaîne.
$lengthOptionnel. Nombre de caractères à retourner. Omettre (ou passer null) pour lire jusqu'à la fin de la chaîne. Une valeur négative signifie « s'arrêter à ce nombre de caractères avant la fin. »

substr() retourne la sous-chaîne extraite. Depuis PHP 8.0, elle retourne toujours une string (une chaîne vide si rien ne correspond) ; avant PHP 8.0, elle retournait false en cas d'échec, ce que l'on trouve encore dans du code plus ancien.

Un exemple de base

php— editable, runs on the server

$offset vaut 0, donc l'extraction commence au premier caractère, et $length vaut 5, donc cinq caractères (Hello) sont retournés. Rappelons que l'offset est basé sur zéro : la position 0 correspond à H, la position 1 à e, et ainsi de suite.

Fonctionnement de l'offset

Un offset positif compte depuis le début ; un offset négatif compte depuis la fin (où -1 est le dernier caractère) :

<?php
$string = "Hello World!";

echo substr($string, 6);   // World!  — from offset 6 to the end
echo "\n";
echo substr($string, -6);  // World!  — last 6 characters
echo "\n";
echo substr($string, -1);  // !       — just the last character

Omettre $length retourne tout à partir de l'offset — pratique pour supprimer un préfixe connu.

Fonctionnement de la longueur

Un $length positif limite le nombre de caractères récupérés. Un $length négatif s'arrête à ce nombre de caractères avant la fin de la chaîne, ce qui est idéal pour supprimer un suffixe connu :

<?php
$string = "Hello World!";

echo substr($string, 0, -1);   // Hello World  — drop the trailing "!"
echo "\n";
echo substr($string, -6, 5);   // World        — start 6 from the end, take 5
echo "\n";
echo substr($string, 4, 0);    // (empty)      — length 0 returns ""

Si la longueur demandée dépasse la fin de la chaîne, substr() retourne simplement ce qui est disponible — elle ne génère jamais d'erreur pour une longueur « trop grande ».

Utilisation pratique : une extension de fichier

Combiner substr() avec strrpos() (qui trouve la dernière position d'un caractère) est la méthode classique pour lire une extension de fichier :

<?php
$filename = "report.final.pdf";
$ext = substr($filename, strrpos($filename, ".") + 1);

echo $ext; // pdf

Pièges courants

  • Offset hors limites. Si $offset est supérieur à la longueur de la chaîne, on obtient une chaîne vide (en PHP 8+). Il ne fait pas de bouclage.
  • Compte les octets, pas les caractères. substr() fonctionne sur les octets. Pour du texte UTF-8 contenant des lettres accentuées ou des emoji, couper au milieu d'un caractère produit des données corrompues. Utilisez mb_substr() pour une extraction sûre en multi-octets.
  • Décalage d'un avec la longueur. $length est un comptage, pas un indice de fin. substr($s, 2, 3) retourne 3 caractères à partir de l'index 2 — et non les caractères entre l'index 2 et l'index 3.

Fonctions associées

  • strlen() — obtenir la longueur d'une chaîne, souvent utilisé pour calculer un $length.
  • strpos() — trouver où commence une sous-chaîne, pour l'utiliser dans substr().
  • explode() — diviser une chaîne en array lorsqu'on dispose d'un délimiteur.
  • trim() — supprimer les espaces (ou d'autres caractères) des deux extrémités.

Pratique

Pratique
Quelle est l'utilisation de la fonction substr() en PHP ?
Quelle est l'utilisation de la fonction substr() en PHP ?
Was this page helpful?