Преобразование первых букв в заглавные(верхний регистр) - PHP
PHP хорош многообразием нативных функций языка. Однако, в некоторых случаях приходится дописывать недостающий функционал. Особенно это заметно при работе с функциями преобразования строк и различными кодировками.
Например, ucfirst — функция, которая преобразовывает первый символ строки в верхний регистр. Казалось бы, не должно возникнуть никаких проблем, но при работе с кириллицей такого преобразования не происходит. Это касается и функции ucwords — преобразует в верхний регистр первый символ каждого слова в строке.
С символами анг.алфавита проблем не возникает:
<?php $test_sting = "test string"; //первый символ строки в верхний регистр echo ucfirst($str); echo "<br/>"; //преобразует в верхний регистр первый символ каждого слова в строке echo ucwords($str); ?>
Вывод:
Test string Test String
Но с кириллицей возникают проблемы:
<?php $test_sting = "тестовая строка"; //первый символ строки в верхний регистр echo ucfirst($str); echo "<br/>"; //преобразует в верхний регистр первый символ каждого слова в строке echo ucwords($str); ?>
Вывод:
тестовая строка тестовая строка
Для PHP типичны случаи, когда функции "плохо" или вообще не работают с кириллицей. Некоторые функции с приставкой mb решают проблемы с кириллицей. Например, mb_strtolower — приведение строки к нижнему регистру. В отличие от strtolower(), то что символ является буквой определяется на основании свойств символа Юникода.
Для решения проблемы определим функцию mb_ucfirst(string str [, string encoding]), которая будет обрабатывать символы Юникода.
<?php if (!function_exists('mb_ucfirst') && extension_loaded('mbstring')) { /** * mb_ucfirst - Make a string's first character uppercase * @param string $str - The input string. * @param string $encoding - string $encoding [optional] &mbstring.encoding.parameter; default UTF-8 * @return string str with first alphabetic character converted to uppercase. */ function mb_ucfirst($str, $encoding='UTF-8') { $str = mb_ereg_replace('^[\ ]+', '', $str); $str = mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding). mb_substr($str, 1, mb_strlen($str), $encoding); return $str; } } ?>Для преобразует в верхний регистр первый символ каждого слова в строке достаточно использовать mb_convert_case в режиме MB_CASE_TITLE.
<?php if (!function_exists('mb_ucwords') && extension_loaded('mbstring')) { /** * mb_ucwords - Uppercase the first character of each word in a string * @param string $str - The input string. * @param string $encoding - string $encoding [optional] &mbstring.encoding.parameter; default UTF-8 * @return string str with uppercase the first character of each word */ function mb_ucwords($str, $encoding='UTF-8') { return mb_convert_case($str, MB_CASE_TITLE, ;encoding);; } } ?>
Добавить комментарий