- Замена регистра в строках PHP
- Проверка, является ли буква прописной или строчной
- Первая заглавная буква
- Для UTF-8:
- Первая строчная
- Для UTF-8:
- Все заглавные буквы
- Для UTF-8:
- Все строчные буквы
- Для UTF-8:
- Заглавная буква в каждом слове
- Для UTF-8:
- Инверсия регистра
- Комментарии 1
- Почему «ucfirst()» не работает для русских символов?
- Ответы (5 шт):
- Дополнительные функции mb_string
- mb_ucfirst
- mb_substr_replace
- mb_invert_case
- mb_str_pad
- mb_str_split
- Результат работы функции:
- Почему функция ucfirst не работает в кодировке utf-8 для русских символов
Замена регистра в строках PHP
Список PHP-функций для изменения регистра символов в строках и примеры их использования.
Проверка, является ли буква прописной или строчной
Функция ctype_upper($string) – определяет, являются ли все буквы в строке в верхнем регистре.
$str = 'Ы'; if (ctype_upper($str)) < echo 'Заглавная'; >else
Вариант для кириллицы в кодировке UTF-8:
$str = 'Ы'; if (mb_strtolower($str) !== $str) < echo 'Заглавная'; >else < echo 'строчная'; >// Выведется «Заглавная»
Пример определения регистра для первой буквы в строке:
$text = 'Привет мир!'; $chr = mb_substr($text, 0, 1); if (mb_strtolower($chr) !== $chr) < echo 'Заглавная'; >else < echo 'строчная'; >// Выведется «Заглавная»
Первая заглавная буква
ucfirst($string) — преобразует первый символ строки в верхний регистр.
$text = 'привет Мир!'; echo ucfirst($text);
Для UTF-8:
if(!function_exists('mb_ucfirst')) < function mb_ucfirst($str) < $fc = mb_strtoupper(mb_substr($str, 0, 1)); return $fc . mb_substr($str, 1); >> $text = 'привет Мир!'; echo mb_ucfirst($text); // Привет Мир!
Первая строчная
ucfirst($string) — преобразует первый символ строки в верхний регистр.
$text = 'Привет Мир!'; echo lcfirst($text);
Для UTF-8:
if(!function_exists('mb_lcfirst')) < function mb_lcfirst($str) < $fc = mb_strtolower(mb_substr($str, 0, 1)); return $fc . mb_substr($str, 1); >> $text = 'Привет Мир!'; echo mb_lcfirst($text); // привет Мир!
Все заглавные буквы
Для UTF-8:
$text = 'привет Мир!'; echo mb_strtoupper($text); // ПРИВЕТ МИР!
Все строчные буквы
$text = 'Привет Мир!'; echo strtolower($text);
Для UTF-8:
$text = 'Привет Мир!'; echo mb_strtolower($text); // привет мир!
Заглавная буква в каждом слове
$text = 'привет мир!'; echo ucwords($text);
Для UTF-8:
if(!function_exists('mb_ucwords')) < function mb_ucwords($str) < $str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8"); return ($str); >> $text = 'привет мир!'; echo mb_ucwords($text); // Привет Мир!
Инверсия регистра
function mb_flip_case($string) < $characters = preg_split('/(?$char) < if (mb_strtolower($char, "UTF-8") != $char) < $char = mb_strtolower($char, 'UTF-8'); >else < $char = mb_strtoupper($char, 'UTF-8'); >$characters[$key] = $char; > return implode('', $characters); > $text = 'Привет Мир!'; echo mb_flip_case($text); // пРИВЕТ мИР!
Комментарии 1
function invertCase($text)
$string = »;
/*
Решение №1
$mb_strlen = mb_strlen($text);
$i = $mb_strlen;
while ($i > 0) $i—;
$char = mb_substr($text, $i, 1);
$char = (mb_strtolower($char) === $char) ? mb_strtoupper($char) : mb_strtolower($char);
$string = $char.$string;
>
*/
// Решение №2
$arr = mb_str_split($text, 1);
foreach ($arr as $char) $char = (mb_strtolower($char) === $char) ? mb_strtoupper($char) : mb_strtolower($char);
$string .= $char;
>
return $string;
>
Авторизуйтесь, чтобы добавить комментарий.
Почему «ucfirst()» не работает для русских символов?
Здравствуйте! У меня часто возникают проблемы с кодировками, в частности с отображением русских символов во всех более-менее современных браузерах. Вот еще один вопрос возник: Почему PHP-функция «ucfirst()» не работает для русских символов? Как можно «заставить» её работать? Или есть хотя бы альтернатива?
P.S Только банальщину с заменой букв по массиву предлагать не стоит.
Спасибо всем, кто откликнулся!
Ответы (5 шт):
UTF-8, разумеется? PHP не может нормально работать с многобайтными кодировками. Наиболее близкое решение:
mb_internal_encoding("UTF-8"); function mb_ucfirst($text) < return mb_strtoupper(mb_substr($text, 0, 1)) . mb_substr($text, 1); >echo mb_ucfirst("тест\n");
На всякий случай, дополню: если вы до сих пор кипятите^W используете CP1251 или, упаси Его Макароннейшество, KOI8-R, то может помочь вызов setlocale , с однобайтными кодировками ucfirst кое-как работает:
setlocale(LC_CTYPE, "ru_RU.CP1251"); echo ucfirst("\xf2\xe5\xf1\xf2\n");
Но работать это будет только в случае, если в системе есть такая локаль. Т.е. как повезет.
Если используете utf-8 кодировку, то вам нужна функция mb_convert_case.
$name = 'ярослав'; echo mb_convert_case($name, MB_CASE_TITLE, "UTF-8"); // Ярослав
$title = 'ASDASDASDASDASD'; $title = mb_strtolower($title, 'UTF-8'); $title = mb_strtoupper(mb_substr($title, 0, 1, 'UTF-8'), 'UTF-8') . mb_substr($title, 1, null,'UTF-8'); echo $title; // 'Asdasdasdasdasd'
Столкнулся с подобной проблемой — задача выводить имена пользователей в любой кодировке (кириллице, латинице и др.) из массива с большой буквы. Изобрел такое решение:
$names = array("катя", "МАША", "verONIka"); function fix_names($names) < for ($n = 0; $n < 3; $n++) < $names [$n] = mb_strtolower($names[$n]); //все к нижнему регистру echo mb_convert_case("$names[$n]", MB_CASE_TITLE, "UTF-8")."\n"; //выводим с первым символом в верхнем регистре >> fix_names($names); //Катя Маша Veronika
Правда не знаю насколько правильно я все сделал, так как новичок и всего неделю изучаю PHP, но тем не менее данный код работает как и требовалось.
PHP-функция ucfirst() не работает для русских символов потому что зависит от ваших настроек кодировки и региональных настроек системы — «локали» ( locale ). Что бы абстрагироваться от этих настроек можно использовать функцию mb_strtoupper() , но только для первого символа что бы симулировать ucfirst() .
Самое простое решение для строки:
$string = 'кириллица'; $string[0] = mb_strtoupper($string[0]); echo $string; // Кириллица
Дополнительные функции mb_string
Как известно строковые функции PHP не правильно работают с русским текстом в кодировке UTF-8. Чтобы решить эту проблему предполагается использовать функции mb_string , но тут проблема полностью не решается т.к. некоторых функций в нем нет. Далее представлены недостающие функции и примеры их работы.
mb_ucfirst
Первый символ строки в верхний регистр, аналог функции ucfirst() .
if (!function_exists('mb_ucfirst')) < function mb_ucfirst($str, $enc = 'utf-8') < return mb_strtoupper(mb_substr($str, 0, 1, $enc), $enc) . mb_substr($str, 1, mb_strlen($str, $enc), $enc); >>
echo ucfirst('русский текст'); // русский текст echo mb_ucfirst('русский текст'); // Русский текст
mb_substr_replace
Замена части строки, аналог функции substr_replace() .
if (!function_exists('mb_substr_replace')) < function mb_substr_replace($original, $replacement, $position, $length) < $startString = mb_substr($original, 0, $position, 'UTF-8'); $endString = mb_substr($original, $position + $length, mb_strlen($original), 'UTF-8'); $out = $startString . $replacement . $endString; return $out; >>
echo substr_replace('Предложение на русском языке', 'английском', 15, 7); // Предлож�английском на русском языке echo mb_substr_replace('Предложение на русском языке', 'английском', 15, 7); // Предложение на английском языке
mb_invert_case
function mb_invert_case($s) < $o = ''; foreach (preg_split('/(?return $o; >
echo mb_invert_case('предложение'); // ПРЕДЛОЖЕНИЕ echo mb_invert_case('ПРЕДЛОЖЕНИЕ'); // предложение
mb_str_pad
Дополнение строки, другой строкой, до заданной длины. Аналог функции str_pad() .
function mb_str_pad($input, $pad_length, $pad_string = ' ', $pad_type = STR_PAD_RIGHT)
mb_str_split
Функция преобразует строку в массив. В PHP mb_str_split появилась с версии 7.4.
if (!function_exists('mb_str_split')) < function mb_str_split($str, $l = 0) < if ($l >0) < $ret = array(); $len = mb_strlen($str, "UTF-8"); for ($i = 0; $i < $len; $i += $l) < $ret[] = mb_substr($str, $i, $l, "UTF-8"); >return $ret; > return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY); > >
Результат работы функции:
$array = str_split('предложение'); print_r($array); // Array // ( // [0] => � // [1] => � // [2] => � // [3] => � // [4] => � // [5] => � // [6] => � // [7] => � // [8] => � // [9] => � // [10] => � // [11] => � // [12] => � // [13] => � // [14] => � // [15] => � // [16] => � // [17] => � // [18] => � // [19] => � // [20] => � // [21] => � // ) $array = mb_str_split('предложение'); print_r($array); // Array // ( // [0] => п // [1] => р // [2] => е // [3] => д // [4] => л // [5] => о // [6] => ж // [7] => е // [8] => н // [9] => и // [10] => е // )
Почему функция ucfirst не работает в кодировке utf-8 для русских символов
Почему функция strtolower не работает в кодировке utf-8 для русских символов
Помогите, пожалуйста. Почему функция strtolower не работает в кодировке utf-8 для русских.
Mb_function и поддержка русских букв в кодировке UTF-8
Доброе время суток, я только-только начал познавать азы PHP. Столкнулся с проблемой поддержки.
Программа для конвертации русских символов в UTF-8
Здравствуйте! А есть у кого прога, которая конвертирует обыкновенные русские символы в кодировку.
Не работает на сервере функция ucfirst()
Какой еще вариант есть? Мне надо перевести в нижний регистр и потом первую букву сделать заглавной.
Сообщение от макs
Сообщение от макs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
$a1 = "САША"; $a2 = "петров"; $a3 = "петРОВИЧ"; echo $a1." ". $a2." ".$a3."
" ; // Вывод: САША петров петРОВИЧ fix_names ($a1,$a2,$a3); echo $a1." ". $a2." ".$a3; // Вывод: Саша Петров Петрович function fix_names ( &$n1,&$n2,&$n3){ $n1 = my_ucfirst(mb_strtolower($n1, 'utf8')); $n2 = my_ucfirst(mb_strtolower($n2, 'utf8')); $n3 = my_ucfirst(mb_strtolower($n3 , 'utf8')); } function my_ucfirst($string, $e ='utf-8') { if (function_exists('mb_strtoupper') && function_exists('mb_substr') && !empty($string)) { $string = mb_strtolower($string, $e); $upper = mb_strtoupper($string, $e); preg_match('#(.)#us', $upper, $matches); $string = $matches[1] . mb_substr($string, 1, mb_strlen($string, $e), $e); } else { $string = ucfirst($string); } return $string; } ?>
C, Linux, UTF-8 — не видно русских символов
Здравствуйте. Я только начинаю разбираться с языком и кодировками и возник следующий вопрос. .
Почему вместо русских букв иероглифы? ( UTF-8 )
Приветствую, форумчане. Редактирую один скрипт и в всплывающих окнах, в самой колонке.
Не работает регулярка для русских символов
Здравствуйте, есть два регулярных выражения. Для латинских символов всё работает, для русских же -.
Расшифровка MD5 не работает для русских символов
Код Отлично отрабатывает английский словарь, но Русские буквы пропускает! Подскажите в чём ошибка.