ucwords()
Die Funktion ucwords() in PHP schreibt den ersten Buchstaben jedes Wortes in einem String groß. Syntax, Parameter und Beispiele im Überblick.
Einführung
Die Funktion ucwords() in PHP schreibt den ersten Buchstaben jedes Wortes in einem String groß und gibt das Ergebnis zurück. Sie ist die ideale Hilfsfunktion, um Benutzereingaben wie "jane doe" in ein ansprechendes "Jane Doe" umzuwandeln — praktisch für Namen, Titel, Überschriften und Beschriftungen.
Diese Seite behandelt die Syntax, den optionalen Trennzeichen-Parameter, die Fallstricke, die die meisten Entwickler überraschen (die Funktion schreibt den Rest des Wortes nicht klein, und sie trennt standardmäßig nur bei Leerzeichen), sowie den Unterschied zwischen ucwords() und verwandten Funktionen.
Syntax
ucwords(string $string, string $separators = " \t\r\n\f\v"): string| Parameter | Beschreibung |
|---|---|
$string | Der Eingabe-String, der transformiert werden soll. |
$separators | (Optional) Die Zeichen, die den Beginn eines neuen „Wortes" markieren. Standardmäßig Leerzeichen: Leerzeichen, Tabulator, Wagenrücklauf, Zeilenumbruch, Seitenvorschub und vertikaler Tabulator. |
Die Funktion gibt einen neuen String zurück — sie verändert $string nicht direkt, da PHP Strings als Wert übergeben werden.
Einfaches Beispiel
Ausgabe:
Hello, World!ucwords() durchläuft den String und schreibt jeden Buchstaben groß, der auf ein Trennzeichen folgt (oder ganz am Anfang steht). Hier werden sowohl hello als auch world mit einem Großbuchstaben begonnen.
Achtung: Die restlichen Buchstaben werden nicht verändert
Ein häufiger Fallstrick ist, dass ucwords() nur den ersten Buchstaben jedes Wortes verändert. Bereits großgeschriebene Buchstaben bleiben unverändert:
<?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 LambWenn Sie einen sauberen Titel wünschen, bei dem nur der erste Buchstabe jedes Wortes großgeschrieben ist, wandeln Sie den String zunächst mit strtolower() in Kleinbuchstaben um:
<?php
$title = "MARY HAD A LITTLE LAMB";
echo ucwords(strtolower($title)); // Mary Had A Little LambBenutzerdefinierte Trennzeichen
Standardmäßig trennen nur Leerzeichen die Wörter, sodass Bindestriche oder senkrechte Striche als einzelnes Wort behandelt werden. Übergeben Sie das optionale Argument $separators, um auch nach anderen Zeichen großzuschreiben:
<?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-PhpDies ist nützlich für Slugs, Namen wie "o'brien" oder beliebigen tokengetrennten Text. Beachten Sie, dass Leerzeichen kein Trennzeichen mehr sind, wenn Sie $separators angeben, sofern Sie es nicht selbst hinzufügen — ein typischer Aufruf lautet daher ucwords($name, " -").
ucwords() vs. verwandte Funktionen
| Funktion | Beschreibung |
|---|---|
ucfirst() | Schreibt nur den ersten Buchstaben des gesamten Strings groß. |
ucwords() | Schreibt den ersten Buchstaben jedes Wortes groß. |
strtoupper() | Wandelt den gesamten String in Großbuchstaben um. |
strtolower() | Wandelt den gesamten String in Kleinbuchstaben um. |
lcfirst() | Schreibt den ersten Buchstaben des Strings klein. |
Hinweis zu Multibyte- und Sonderzeichen
ucwords() arbeitet byteweise und ist für einfaches ASCII zuverlässig. Akzentuierte oder nicht-lateinische Buchstaben (z. B. é, ñ oder kyrillische Schrift) werden nicht korrekt großgeschrieben. Für Unicode-bewusstes Großschreiben von Titeln verwenden Sie stattdessen die mbstring-Erweiterung mit mb_convert_case($string, MB_CASE_TITLE, "UTF-8").
Fazit
ucwords() ist die Standardmethode, um den ersten Buchstaben jedes Wortes in einem String großzuschreiben. Beachten Sie die zwei wichtigsten Verhaltensweisen: Die restlichen Buchstaben bleiben unverändert (kombinieren Sie die Funktion mit strtolower() für sauberes Title Case), und die Trennung erfolgt bei Leerzeichen, sofern keine benutzerdefinierten $separators angegeben werden. Für akzentuierten Text empfiehlt sich stattdessen mb_convert_case().