PHP хорош многообразием нативных функций языка. Однако, в некоторых случаях приходится дописывать недостающий функционал. Особенно это заметно при работе с функциями преобразования строк и различными кодировками.
Например, ucfirst - функция, которая преобразовывает первый символ строки в верхний регистр. Казалось бы, не должно возникнуть никаких проблем, но при работе с кириллицей такого преобразования не происходит. Это касается и функции ucwords - преобразует в верхний регистр первый символ каждого слова в строке.
С символами анг.алфавита проблем не возникает:
"; //преобразует в верхний регистр первый символ каждого слова в строке echo ucwords($str); ?>
Test string Test String
Но с кириллицей возникают проблемы:
"; //преобразует в верхний регистр первый символ каждого слова в строке echo ucwords($str); ?>
Тестовая строка тестовая строка
Для PHP типичны случаи, когда функции "плохо" или вообще не работают с кириллицей. Некоторые функции с приставкой mb решают проблемы с кириллицей. Например, mb_strtolower - приведение строки к нижнему регистру. В отличие от strtolower(), то что символ является буквой определяется на основании свойств символа Юникода.
Для решения проблемы определим функцию mb_ucfirst(string str [, string encoding]), которая будет обрабатывать символы Юникода.
Для преобразует в верхний регистр первый символ каждого слова в строке достаточно использовать mb_convert_case в режиме MB_CASE_TITLE.
Производит преобразование символов строки в нижний регистр.
Синтаксис:
String strtolower(string str);
Преобразует строку в нижний регистр. Возвращает результат перевода.
Надо заметить, что при неправильной настройке локали функция будет выдавать, мягко говоря, странные результаты при работе с буквами кириллицы.
$str = "HeLLo World"; $str = strtolower($str); echo $str; // выведет hello world
strtoupper
Производит преобразование заданной строки в верхний регистр.
Синтаксис:
String strtoupper(string str);
Переводит строку в верхний регистр. Возвращает результат преобразования. Эта функция хорошо работает с английскими буквами, но с русскими может чудить.
$str = "Hello World"; $str = strtoupper($str); echo $str; // выведет HELLO WORLD
ucfirst
Производит преобразование первого символа строки в верхний регистр.
Синтаксис:
String ucfirst(string str);
Возвращает строку, у которой первый символ заглавный.
$str = "hello world"; $str = ucfirst($str); echo $str; // выведет Hello world
ucwords
Производит преобразование первого символа каждого слова строки в верхний регистр.
Синтаксис:
String ucwords(string str);
Возвращает строку, у которой первый символ каждого слова в строке заглавный.
Под словом здесь понимается участок строки, которому предшествует пробельный символ: пробел, переход на новую строку, прогонка страницы, возврат каретки, горизонтальная и вертикальная табуляция.
Символы кириллицы могут быть неправильно конвертированы.
$str = "hello world"; $str = ucfirst($str); echo $str; // выведет Hello World
Функции изменения регистра
strtolower
Производит преобразование символов строки в нижний регистр.
Синтаксис:
string strtolower(string str);
Преобразует строку в нижний регистр. Возвращает результат перевода.
Надо заметить, что при неправильной настройке локали функция будет выдавать, мягко говоря, странные результаты при работе с буквами кириллицы.
$str = "HeLLo World";
$str = strtolower($str);
// выведет hello world
strtoupper
Производит преобразование заданной строки в верхний регистр.
Синтаксис:
string strtoupper(string str);
Переводит строку в верхний регистр. Возвращает результат преобразования. Эта функция хорошо работает с английскими буквами, но с русскими может чудить.
$str = "Hello World";
$str = strtoupper($str);
// выведет HELLO WORLD
Производит преобразование первого символа строки в верхний регистр.
Синтаксис:
string ucfirst(string str);
Возвращает строку, у которой первый символ заглавный.
$str = "hello world";
$str = ucfirst($str);
// выведет Hello world
Производит преобразование первого символа каждого слова строки в верхний регистр.
Синтаксис:
string ucwords(string str);
Возвращает строку, у которой первый символ каждого слова в строке заглавный.
Под словом здесь понимается участок строки, которому предшествует пробельный символ: пробел, переход на новую строку, прогонка страницы, возврат каретки, горизонтальная и вертикальная табуляция.
Символы кириллицы могут быть неправильно конвертированы.
$str = "hello world";
$str = ucfirst($str);
// выведет Hello World
Из книги Энциклопедия разработчика модулей ядра Linux автора Померанц Ори Из книги Человеческий фактор в программировании автора Константин Ларри Л54 Агенты изменения Одна рыба, сделав правильное движение в нужный момент, может изменить курс всего косяка. В группе, разрабатывающей программное обеспечение, успешность введения нового инструмента или улучшенного метода управления версиями часто зависит от
Из книги Эффективное использование STL автора Мейерс СкоттСовет 35. Реализуйте простые сравнения строк без учета регистра символов с использованием mismatch или lexicographical_compare Один из вопросов, часто задаваемых новичками в STL - «Как в STL сравниваются строки без учета регистра символов?» Простота этого вопроса обманчива. Сравнения
Из книги Основы объектно-ориентированного программирования автора Мейер БертранСравнение строк без учета регистра символов Мэтт ОстернЕсли вам когда-либо доводилось писать программы, в которых используются строки (а кому, спрашивается, не доводилось?), скорее всего, вы встречались с типичной ситуацией - две строки, различающиеся только регистром
Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М Из книги Технология XSLT автора Валиков Алексей НиколаевичИзменения и постоянство Разработка ПО, как уже упоминалось, во многом связана с повторяемостью. Для понимания технической трудности повторного использования, следует понять природу повторяемости. Несмотря на то, что программисты обычно время от времени повторяют одни и
Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.11.8.2 Перемещения и изменения Что произойдет, если пользователь переместит компьютер в другое место, подключив его к иной сети или подсети? Во время загрузки компьютер, использующий DHCP, автоматически изменит свой IP-адрес и маску подсети, а также при необходимости -
Из книги C++. Сборник рецептов автора Диггинс Кристофер22.10.3 Изменения в DNS Новый тип записи о ресурсе, AAAA, отображает имена доменов в адреса IP версии 6. Пример такой записи:MICKEY IN AAAA 4321:0:1:2:3:4:567:89ABДолжен быть обеспечен и обратный просмотр. Для преобразования адресов в имена для IPv6 потребуется добавить новые домены. Обратный поиск
Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид Из книги Офисный компьютер для женщин автора Пастернак ЕвгенияИзменения в XPath 2.0 Разрабатываемая версия языка XPath, вследствие интеграции с XQuery, очевидно, претерпит серьезные изменения. Новая спецификация уже сейчас разбита на два документа: документ, описывающий модель данных и документ, описывающий функции и операторы. Поэтому на
Из книги HTML, XHTML и CSS на 100% автора Квинт Игорь11.7.2. Изменения в коде Как только в parseCommand() будут правильно отражены структуры данных, то запуск команд в правильном порядке становится довольно простым при достаточном внимании к деталям. Прежде всего, мы добавляем цикл в parseCommand() для запуска дочерних процессов,
Из книги автора4.13. Выполнение сравнения строк без учета регистра ПроблемаИмеются две строки и требуется узнать, не равны ли они, не учитывая регистр их символов. Например, «cat» не равно «dog», но «Cat» должна быть равна «cat», «CAT» или «caT».РешениеСравните строки, используя стандартный
Из книги автора4.14. Выполнение поиска строк без учета регистра
ПроблемаТребуется найти в строке подстроку, не учитывая разницу в регистре.РешениеИспользуйте стандартные алгоритмы transform и search, определенные в
8.1.8. Игнорирование регистра символов По умолчанию команда grep чувствительна к изменению регистра символов. Чтобы провести поиск без учета регистра, воспользуйтесь опцией -i. В файле data.f обозначение месяца Sept встречается как в верхнем, так и в нижнем регистре. Поэтому для
Из книги автораИзменения Если изменений в документе много, удобно пользоваться этой группой кнопок.Например, вы видите исправление, и вы с ним согласны. Ставите в него курсор и нажимаете кнопку Принять. Выделение исправления пропадает, и оно органично вписывается в ваш текст.У этой
Из книги автораНазначение имен тегов и атрибутов зависит от регистра В документах HTML имена тегов и атрибутов не зависят от регистра символов, так что, например, запись