HOWTO · PHP

Comment supprimer le dernier caractère d'une chaîne de caractères en PHP

Cet article présente la manière de supprimer le dernier caractère d'une chaîne de caractères en PHP. Il inclut la fonction rtrim() et la fonction substr(). Découvrez les meilleures méthodes de manipulation de chaînes en PHP et améliorez vos compétences en programmation grâce à des exemples pratiques et des explications claires.

Sur cette page

Supprimer du contenu de la fin d’une chaîne en PHP

Pour supprimer du contenu de la fin d’une chaîne en PHP, choisissez la fonction en fonction de ce qui doit être supprimé. Utilisez rtrim() pour supprimer un nombre quelconque d’octets de fin appartenant à un ensemble de caractères spécifié. Utilisez substr() avec une longueur de -1 pour conserver la chaîne à l’exception de son octet final. Les chaînes PHP sont orientées octets, utilisez donc une fonction compatible multibyte lorsque « caractère » désigne un caractère Unicode complet.

Utilisez rtrim() pour supprimer un ensemble de caractères de fin

rtrim() supprime les caractères du côté droit d’une chaîne tant qu’ils appartiennent à son deuxième argument, appelé masque de caractères. Le masque est un ensemble de caractères éligibles, pas un suffixe qui doit correspondre comme une séquence complète unique. La fonction continue de supprimer les octets de cet ensemble jusqu’à ce qu’elle atteigne un octet qui ne figure pas dans le masque. En conséquence, elle peut supprimer plusieurs caractères de fin différents ainsi que des copies répétées d’un même caractère.

Pour une valeur qui peut se terminer par l’un de deux signes de ponctuation, cet exemple complet applique le masque !? :

<?php
$value = "report!?!!";
$clean = rtrim($value, "!?");
echo $clean, PHP_EOL;
report

Les points d’exclamation de fin et le point d’interrogation appartiennent tous au masque, de sorte que chacun est supprimé de la fin jusqu’à atteindre le t précédent.

Utilisez cette méthode lorsque la règle est « supprimer la ponctuation finale ou le remplissage de cet ensemble ». Spécifiez uniquement les caractères qui doivent pouvoir être supprimés. Par exemple, le masque !?. permet de supprimer toute séquence de ces trois caractères à la fin ; il ne signifie pas « supprimer le suffixe littéral !?. ». Si la chaîne se termine par un caractère hors du masque, ce caractère et tout ce qui le précède restent. Une chaîne vide reste vide.

Utilisez substr() pour supprimer le caractère final

Pour une chaîne ASCII dont l’objectif est de supprimer exactement son dernier caractère, substr($string, 0, -1) conserve le préfixe et omet l’octet final. Le décalage de départ 0 commence au début de la chaîne. Une longueur négative compte à rebours depuis la fin, de sorte que -1 fait s’arrêter la partie renvoyée un octet avant la fin.

<?php
$string = "Hello World!";
$withoutLastByte = substr($string, 0, -1);
echo $withoutLastByte, PHP_EOL;
Hello World

Ce code omet l’octet final, qu’il s’agisse d’une lettre, d’un signe de ponctuation ou d’un espace ; contrairement à rtrim(), il ne vérifie pas la valeur de l’octet.

Les chaînes PHP et substr() sont orientés octets. En UTF-8, un caractère affiché peut utiliser plusieurs octets, de sorte que supprimer un octet d’une chaîne se terminant par un caractère multibyte peut laisser une séquence d’octets incomplète au lieu de supprimer un caractère complet. Pour supprimer un caractère Unicode, utilisez mb_substr($string, 0, -1, 'UTF-8') avec l’extension mbstring activée. Choisissez l’encodage qui correspond aux données lorsqu’il ne s’agit pas d’UTF-8.

Choisissez la bonne approche et gérez les cas limites

Utilisez rtrim() lorsque la règle de suppression nomme un ensemble de caractères de fin et peut en supprimer plusieurs. Utilisez substr() lorsque la règle consiste à écarter un nombre fixe d’octets, quelles que soient leurs valeurs. Pour une valeur ASCII simple et un caractère final, substr($string, 0, -1) exprime directement cette intention. Pour un remplissage composé de plusieurs caractères possibles, fournissez à rtrim() le masque exact que vous souhaitez.

Les deux fonctions renvoient une chaîne ; aucune ne modifie la variable d’origine en place. Affectez le résultat si le code ultérieur a besoin de la valeur nettoyée. Avant de choisir une méthode, examinez si l’entrée peut être vide, si le caractère cible est réellement présent à la fin et si les données utilisent un encodage multibyte. La chaîne vide reste vide avec l’une ou l’autre opération, tandis que rtrim() laisse une fin non correspondante inchangée. substr() supprime toujours un octet sans en vérifier la signification.

Une règle pratique consiste à utiliser rtrim() pour un ensemble de caractères de fin et substr() pour un nombre fixe d’octets. Si « caractère » désigne un point de code Unicode complet dans votre application, utilisez la fonction de chaîne multibyte correspondante et assurez-vous que son extension et son encodage sont configurés. Ces distinctions aident également à adapter les exemples : modifiez le masque pour définir quels octets de fin peuvent être supprimés, ou modifiez la longueur de substr() pour définir combien d’octets doivent être omis.