Преобразование первых букв в заглавные(верхний регистр) - PHP

PHP
/
2014-12-17 12:36
Просмотры: 19158

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);;
    }
}
?>

Добавить комментарий

comments powered by Disqus