16 Ноябрь'11
2 Изменение регистра символов
Необходимо было проверить строку на наличие слов, написанных в верхнем регистре и заменить их на слово в нижнем регистре, но с заглавным первым символом.
Функция ctype_upper не подошла, т.к. плохо работает с кириллицей.
Написал такую функцию:
function lower($str, $charset='UTF-8') { // Разбиение строки. $tmp = explode(' ', $str); if (is_array($tmp) && 0 < ($count = count($tmp))) { for ($i=0;$i<$count;$i++) { /** * Для определения кириллицы используется тождественное сравнивание, * т.к. ctype_upper работает некорректно. * */ if ($tmp[$i] !== mb_strtolower($tmp[$i], $charset)) { $tmp[$i] = mb_convert_case(mb_strtolower($tmp[$i], $charset), MB_CASE_TITLE, $charset); } } } $str = implode(' ', $tmp); return $str; }
Использовать можно так:
$str = 'Записки WEB-ПРОГРАММИСТА'; echo lower($str); // Записки Web-Программиста
Есть 2 коммент к сообщению: “Изменение регистра символов”
Написать комментарий
Напишите свой отзыв, комментарий ниже.
Не очень понял, зачем вообще разбивать все в массив, если в итоге вы сохраняете там знаки препинания, дефисы и прочее.
И правда. Говнокод получился. Вероятно потому, что изначально я другим способом.