ucwords()
La fonction ucwords() en PHP met en majuscule le premier caractère de chaque mot d'une chaîne. Découvrez sa syntaxe et ses options.
Introduction
La fonction ucwords() en PHP met en majuscule le premier caractère de chaque mot d'une chaîne et retourne le résultat. C'est l'utilitaire idéal pour transformer une saisie utilisateur comme "jane doe" en un "Jane Doe" présentable — pratique pour les noms, titres, en-têtes et libellés.
Cette page couvre la syntaxe, le paramètre optionnel de délimiteur, les pièges qui surprennent la plupart des développeurs (la fonction ne met pas en minuscule le reste du mot, et elle ne divise que sur les espaces par défaut), ainsi que les différences entre ucwords() et les fonctions associées.
Syntaxe
ucwords(string $string, string $separators = " \t\r\n\f\v"): string| Paramètre | Description |
|---|---|
$string | La chaîne d'entrée à transformer. |
$separators | (Optionnel) Les caractères qui marquent le début d'un nouveau « mot ». Par défaut, les espaces blancs : espace, tabulation, retour chariot, nouvelle ligne, saut de page et tabulation verticale. |
La fonction retourne une nouvelle chaîne — elle ne modifie pas $string en place, car les chaînes PHP sont passées par valeur.
Exemple de base
Résultat :
Hello, World!ucwords() parcourt la chaîne et met en majuscule toute lettre qui suit un délimiteur (ou qui se trouve au tout début). Ici, hello et world ont tous les deux leur première lettre mise en majuscule.
Piège : la fonction ne met pas en minuscule le reste
Une surprise courante est que ucwords() ne touche que la première lettre de chaque mot. Les lettres déjà en majuscule sont laissées telles quelles :
<?php
echo ucwords("hello WORLD"); // Hello WORLD — "WORLD" keeps its existing uppercase letters
echo "\n";
echo ucwords("MARY had a LITTLE lamb"); // MARY Had A LITTLE LambSi vous souhaitez un titre propre où seule la première lettre de chaque mot est en majuscule, mettez d'abord la chaîne en minuscule avec strtolower() :
<?php
$title = "MARY HAD A LITTLE LAMB";
echo ucwords(strtolower($title)); // Mary Had A Little LambDélimiteurs personnalisés
Par défaut, seuls les espaces séparent les mots, donc les valeurs avec tirets ou barres verticales sont traitées comme un seul mot. Passez l'argument optionnel $separators pour mettre en majuscule après d'autres caractères également :
<?php
// Default: only the first letter is capitalized.
echo ucwords("hello-world|of-php"); // Hello-world|of-php
echo "\n";
// Treat "-" and "|" as word boundaries as well.
echo ucwords("hello-world|of-php", "-|"); // Hello-World|Of-PhpCela est utile pour les slugs, les noms comme "o'brien", ou tout texte séparé par des caractères spéciaux. Notez que lorsque vous fournissez $separators, les espaces ne sont plus des délimiteurs à moins que vous ne les incluiez vous-même — un appel typique est donc ucwords($name, " -").
ucwords() vs. fonctions associées
| Fonction | Ce qu'elle fait |
|---|---|
ucfirst() | Met en majuscule uniquement le premier caractère de toute la chaîne. |
ucwords() | Met en majuscule le premier caractère de chaque mot. |
strtoupper() | Convertit la chaîne entière en majuscules. |
strtolower() | Convertit la chaîne entière en minuscules. |
lcfirst() | Met en minuscule le premier caractère de la chaîne. |
Remarque sur les caractères multioctets et accentués
ucwords() fonctionne octet par octet et est fiable pour l'ASCII pur. Elle ne capitalise pas correctement les lettres accentuées ou non latines (par exemple é, ñ, ou le cyrillique). Pour une mise en titre respectant Unicode, utilisez l'extension mbstring avec mb_convert_case($string, MB_CASE_TITLE, "UTF-8") à la place.
Conclusion
ucwords() est la méthode standard pour mettre en majuscule la première lettre de chaque mot d'une chaîne. Retenez ses deux comportements clés : elle laisse les lettres restantes telles quelles (combinez-la avec strtolower() pour une casse de titre propre), et elle divise sur les espaces sauf si vous passez des $separators personnalisés. Pour le texte accentué, préférez mb_convert_case().