PHP met à disposition la fonction native ucwords() pour élever en majuscule l’initiale de chaque mot détecté dans une chaîne. Contrairement à ucfirst() qui n’agit que sur le premier caractère de la chaîne entière, ucwords() parcourt l’intégralité du contenu transmis. Elle identifie les mots grâce à des délimiteurs configurables, dont l’espace est la valeur par défaut. Son domaine d’application couvre le formatage de titres, de noms complets, de désignations commerciales ou d’intitulés de navigation.
Table des matières
Syntaxe de ucwords PHP
ucwords() reçoit un paramètre obligatoire de type string et un second paramètre optionnel $separators définissant les délimiteurs de mots. Par défaut, les séparateurs reconnus incluent l’espace, la tabulation \t, le retour chariot \r, la nouvelle ligne \n et d’autres caractères d’espacement standard. Cette couverture par défaut gère automatiquement les chaînes multilignes sans nécessiter de configuration supplémentaire. Le type de retour est garanti string dans tous les cas, indépendamment du contenu ou de la longueur de la chaîne d’entrée.
En PHP 8, transmettre un type non-string déclenche une coercition silencieuse avant que la capitalisation soit appliquée sur la chaîne.
ucwords(string $string, string $separators = " \t\r\n\f\v"): string
La signature officielle révèle que ucwords() se distingue de ucfirst() par l’existence de ce second paramètre configurable. Soumettre une chaîne vide "" retourne une chaîne vide sans erreur ni avertissement de l’interpréteur. Cette solidité la rend intégrable directement dans des expressions sans gestion d’exception particulière.
Quelle est la fonction de ucwords en PHP ?
ucwords() parcourt chaque segment de la chaîne délimité par un séparateur et capitalise le caractère qui le suit immédiatement. Elle produit une nouvelle chaîne sans altérer la variable source, ce qui respecte le principe d’immuabilité des chaînes en PHP. Les caractères internes de chaque mot — majuscules ou minuscules — traversent la fonction sans aucune altération. Cette précision chirurgicale la positionne comme un outil de formatage structurel, distinct des fonctions de conversion globale comme strtoupper().
Pour agir uniquement sur le premier caractère d’une phrase sans toucher aux mots suivants, ucfirst() reste la fonction la plus adaptée.
<?php
$chaine = "bonjour tout le monde";
$resultat = ucwords($chaine);
echo $resultat;
?>
La sortie affichée est "Bonjour Tout Le Monde" avec l’initiale de chaque mot promue en majuscule. Les caractères qui suivent chaque initiale demeurent dans leur état d’origine sans intervention de la fonction. La valeur transformée doit être capturée dans une variable pour être réutilisée dans le reste du traitement.
Comment utiliser le paramètre $separators de ucwords en PHP ?
Le paramètre $separators est la fonctionnalité qui différencie réellement ucwords() des autres fonctions de capitalisation PHP. Il étend la détection des limites de mots à des caractères comme le tiret -, l’underscore _ ou la barre oblique /. Chaque caractère déclaré dans ce paramètre est traité indépendamment comme un déclencheur de capitalisation pour le caractère suivant. Cette souplesse permet d’adapter la fonction à des formats de données métier très variés comme les noms composés ou les slugs.
L’exemple suivant formate un nom composé contenant des tirets, cas fréquent dans les bases de données de contacts ou les annuaires.
<?php
$nom = "jean-pierre dupont-martin";
$formate = ucwords($nom, " -");
echo $formate;
?>
La sortie "Jean-Pierre Dupont-Martin" capitalise correctement chaque segment délimité par un espace ou un tiret. Sans le caractère "-" dans $separators, le résultat aurait produit "Jean-pierre Dupont-martin" avec les lettres post-tiret en minuscules. Ce paramètre est indispensable dès que la structure de la chaîne dépasse le simple découpage par espace.
Comment combiner ucwords et strtolower en PHP ?
Les données brutes issues de formulaires arrivent souvent avec une casse erratique qui compromet la cohérence visuelle de l’interface finale. Passer la chaîne dans strtolower() avant ucwords() garantit que chaque mot débute par une majuscule suivie de minuscules, quelle que soit la saisie d’origine. Cette séquence constitue la méthode de référence pour uniformiser des noms de personnes, des titres éditoriaux ou des libellés de produits. Elle neutralise des saisies incohérentes comme "JEAN DUPONT" ou "jEAN dUPONT" avant tout affichage ou stockage.
L’exemple suivant applique cette normalisation sur un nom composé avec tiret saisi de manière imprévisible via un champ de formulaire.
<?php
$saisie = "jEAN-PIERRE dUPONT";
$formate = ucwords(strtolower($saisie), " -");
echo $formate;
?>
La sortie "Jean-Pierre Dupont" est homogène, typographiquement correcte et prête pour un affichage ou un enregistrement en base de données. Omettre strtolower() en amont laisserait subsister les majuscules internes de chaque mot malgré l’exécution de ucwords(). Cette combinaison est recommandée dans tout traitement de données de contact, de catalogue produit ou de gestion de contenu éditorial.
Quelle est la limite de ucwords sur les caractères accentués en PHP ?
ucwords() opère sur la plage ASCII standard et reste aveugle aux caractères Unicode comme é, à ou ü placés en tête de mot. Un segment débutant par une voyelle accentuée ne sera jamais capitalisé, quelle que soit la valeur de $separators transmise. La solution officielle documentée sur php.net est mb_convert_case() de l’extension mbstring avec le mode MB_CASE_TITLE. Ce mode reproduit fidèlement le comportement de ucwords() sur des chaînes entièrement encodées en UTF-8 avec support complet des diacritiques.
L’exemple suivant confronte les deux approches sur une chaîne contenant des voyelles accentuées en position initiale de mot.
<?php
$chaine = "écologie et société durable";
// Résultat partiel avec ucwords
echo ucwords($chaine);
// Sortie : "écologie Et société Durable"
// Résultat complet avec mb_convert_case
echo mb_convert_case($chaine, MB_CASE_TITLE, 'UTF-8');
// Sortie : "Écologie Et Société Durable"
?>
La première sortie illustre l’échec silencieux de ucwords() sur é et é de société en position initiale. mb_convert_case() interprète chaque point de code Unicode et produit une capitalisation conforme pour tous les caractères accentués. Assure-toi que la directive extension=mbstring est décommentée et active dans ton php.ini avant tout déploiement en environnement de production.
Fonctions PHP de capitalisation
PHP propose quatre fonctions pour gérer la capitalisation selon le périmètre d’action souhaité. ucwords() et ucfirst() couvrent les cas ASCII sans nécessiter de configuration particulière ni d’extension. Dès qu’une chaîne contient des caractères accentués, seule mb_convert_case() produit un résultat typographiquement correct. Associer strtolower() en amont de ucwords() ou ucfirst() reste indispensable pour neutraliser une casse d’entrée imprévisible.
| Fonction | Périmètre d’action | Support UTF-8 |
|---|---|---|
ucwords() | Initiale de chaque mot | ❌ Non |
ucfirst() | Premier caractère de la chaîne | ❌ Non |
mb_convert_case() | Capitalisation par mode MB_CASE_TITLE | ✅ Oui |
strtolower() | Conversion globale en minuscules | ❌ Non |
ucwords() est le choix naturel pour des titres ou des noms en ASCII, tandis que mb_convert_case() prend le relais dès que des diacritiques entrent en jeu. strtolower() n’est pas une fonction de capitalisation à proprement parler, mais elle conditionne la fiabilité des deux premières dans un contexte de données utilisateur brutes.
Sources: PHPnet