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ètre | Description |
|---|---|
$string | La chaîne d'entrée à partir de laquelle extraire. |
$offset | Position de départ basée sur zéro. Une valeur négative compte depuis la fin de la chaîne. |
$length | Optionnel. 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
$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 characterOmettre $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; // pdfPièges courants
- Offset hors limites. Si
$offsetest 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. Utilisezmb_substr()pour une extraction sûre en multi-octets. - Décalage d'un avec la longueur.
$lengthest 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 danssubstr().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.