Ucwords: примеры (PHP)

Изучение функции ucwords: капитализация слов в PHP
Раздел: Работа со строками
ucwords(string string [, string separators]): string

Описание функции ucwords

Назначение

Функция ucwords преобразует первый символ каждого слова в строке в верхний регистр. Она применяется для форматирования текстовых данных, таких как имена, заголовки или любые другие строки, где требуется соблюдение регистра в начале слов.

Аргументы

Функция принимает два параметра:

  • string $string — обязательный. Исходная строка для преобразования.
  • string $separators — необязательный. Строка, содержащая символы-разделители слов. По умолчанию используется набор: пробел, табуляция (\t), возврат каретки (\r), новая строка (\n), подача страницы (\f), вертикальная табуляция (\v). В PHP 8.1 и выше можно задать собственные разделители.

Функция возвращает модифицированную строку.

Примеры использования

Базовое применение

Стандартное использование с разделителями по умолчанию.

$str = "hello world of php";
echo ucwords($str);
Hello World Of Php
С пользовательскими разделителями

Использование второго аргумента для определения своих разделителей слов.

$str = "foo-bar|baz example";
echo ucwords($str, "-|");
Foo-Bar|Baz Example
Обработка строк с апострофами

Функция не считает апостроф разделителем по умолчанию.

$str = "it's a wonderful life";
echo ucwords($str);
It's A Wonderful Life

Чтобы изменить первую букву после апострофа, его нужно указать как разделитель.

$str = "it's a wonderful life";
echo ucwords($str, "' ");
It'S A Wonderful Life

Похожие функции в PHP

Преобразует только первый символ строки в верхний регистр. Подходит для предложений.

echo ucfirst("hello world");
Hello world

Переводит всю строку в верхний регистр. Используется для акронимов или выделения.

echo strtoupper("important");
IMPORTANT
mb_convert_case

Функция из модуля Multibyte String для работы с многобайтными кодировками. Поддерживает несколько режимов, включая MB_CASE_TITLE, аналогичный ucwords, но с корректной поддержкой Unicode.

echo mb_convert_case("привет мир", MB_CASE_TITLE, 'UTF-8');
Привет Мир

Выбор функции: ucwords идеальна для простых однобайтовых строк. Для многобайтовых строк (кириллица, иероглифы) предпочтительнее mb_convert_case. ucfirst и strtoupper решают более узкие задачи.

Типичные ошибки

Игнорирование многобайтовых кодировок

Функция не поддерживает Unicode, что может привести к некорректному результату для кириллицы или других многобайтовых символов.

echo ucwords("привет мир");
привет мир

Решение — использование mb_convert_case.

Неявное приведение типов

Функция ожидает строку. Передача других типов данных может привести к неочевидному поведению.

echo ucwords(true);
echo ucwords(null);
1

Логическое значение true преобразуется в строку '1', а null — в пустую строку.

Неправильное указание разделителей

Второй аргумент трактуется как набор символов, а не как строка-разделитель целиком.

$str = "one-two|three";
echo ucwords($str, "-|"); // Каждый символ в наборе - разделитель
echo ucwords($str, "-|+"); // Добавлен лишний символ
One-Two|Three
One-Two|Three

Изменения в новых версиях PHP

PHP 8.1.0

Параметр $separators стал опциональным и может принимать пустую строку. Раньше его нельзя было опустить при вызове с именованными аргументами.

// До PHP 8.1 при использовании именованных аргументов нужно было явно передавать $separators.
// В PHP 8.1 и выше можно опустить, будет использовано значение по умолчанию.
echo ucwords(string: "hello world");
Hello World

Расширенные примеры

Обработка данных форм

Использование для приведения к стандартному виду имени пользователя.

Пример php
$name = "jOhN dOE";
$formattedName = ucwords(strtolower($name));
echo $formattedName;
John Doe
Работа со сложными разделителями

Капитализация слов в строке, где слова разделены разными символами.

Пример php
$data = "user_id;first_name|last_name.email";
echo ucwords($data, ";|_.");
User_Id;First_Name|Last_Name.Email
Комбинирование с explode и implode

Более гибкая обработка с предварительным разбиением строки по сложному правилу.

Пример php
$str = "some-data-from-api";
$parts = explode('-', $str);
$parts = array_map('ucfirst', $parts);
echo implode('-', $parts);
Some-Data-From-Api
Обработка элементов массива

Применение функции ко всем строкам в массиве.

Пример php
$titles = ["hello world", "php programming"];
$titles = array_map('ucwords', $titles);
print_r($titles);
Array
(
    [0] => Hello World
    [1] => Php Programming
)

Аналоги в других языках

Ucwords в Python

Метод str.title() или функция string.capwords() из модуля string. Отличие от PHP: title() может некорректно обрабатывать апострофы и не позволяет задавать разделители.

s = "hello world of python"
print(s.title())
Hello World Of Python

Ucwords в Javascript

В JavaScript нет прямой встроенной функции. Стандартное решение — использование регулярных выражений.

let str = "hello world of js";
let result = str.replace(/\b\w/g, char => char.toUpperCase());
console.log(result);
Hello World Of Js

Ucwords в MySQL

Функция INITCAP() (доступна в MariaDB, в MySQL с версии 8.0.30). Возвращает строку, в которой каждое слово начинается с заглавной буквы.

SELECT INITCAP('hello world of mysql');
Hello World Of Mysql

PHP ucwords function comments

En
Ucwords Uppercase the first character of each word in a string