Преобразование первых букв в заглавные(верхний регистр) - 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);;
}
}
?>
Добавить комментарий