Изменение регистра символов
Необходимо было проверить строку на наличие слов, написанных в верхнем регистре и заменить их на слово в нижнем регистре, но с заглавным первым символом.
Функция 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-Программиста
Не очень понял, зачем вообще разбивать все в массив, если в итоге вы сохраняете там знаки препинания, дефисы и прочее.
И правда. Говнокод получился. Вероятно потому, что изначально я другим способом.