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
Функция из модуля 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
Параметр $separators стал опциональным и может принимать пустую строку. Раньше его нельзя было опустить при вызове с именованными аргументами.
// До PHP 8.1 при использовании именованных аргументов нужно было явно передавать $separators.
// В PHP 8.1 и выше можно опустить, будет использовано значение по умолчанию.
echo ucwords(string: "hello world");Hello World
Расширенные примеры
Использование для приведения к стандартному виду имени пользователя.
$name = "jOhN dOE";
$formattedName = ucwords(strtolower($name));
echo $formattedName;John Doe
Капитализация слов в строке, где слова разделены разными символами.
$data = "user_id;first_name|last_name.email";
echo ucwords($data, ";|_.");User_Id;First_Name|Last_Name.Email
Более гибкая обработка с предварительным разбиением строки по сложному правилу.
$str = "some-data-from-api";
$parts = explode('-', $str);
$parts = array_map('ucfirst', $parts);
echo implode('-', $parts);Some-Data-From-Api
Применение функции ко всем строкам в массиве.
$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