bonjour,

Dans les versions de php<8.2, ucfirst souffre d'une particularité (moi j’appellerai ça un bg mais bon... ya débat). Je ne sais pas quand il a été notifié, mais je le rappelle ici car j'ai cherché pendant des heures pour corriger un bug!
Si vous faîtes un traitement du genre saisir un nom, le mettre en capitale (ucfirst/ucwords) pour télécharger un fichier du même nom ou faire une correspondance grammaticale à la casse précise, alors vous aurez le droit à un souci car ucfirst("TOTO") ne retourne pas forcément Toto suivant votre codage setlocale (donc la recherche d'un Toto.pdf sera infructueuse) !
Des heures j'ai cherché avant avoir lu la spécificité de php8.2 :
La conversion de la casse ne dépend désormais plus de la locale définit avec setlocale(). Seuls les caractères ASCII seront convertis.

https://www.php.net/manual/fr/function.ucfirst.php
https://www.php.net/manual/fr/function.ucwords.php

Donc si vous n'êtes pas en php8.2, il ne faut pas faire ucfirst("TOTO") mais ucfirst(strtolower("TOTO")) pour ne pas souffrir de ce "bug" !

Pour une raison que je ne connais pas, ma locale est "en_US_POSIX" et je ne connais aucune raison orthographique de la langue US pour que que ucfirst("TOTO") ne renvoie pas Toto au lieu de TOTO !
Peut-être que la notion de "capitalisation" soit spécifique aux langues latines....et exclu les langues US...

bonne journée, espérant avoir été utile !