|
|
|
| Здравствуйте. Такой пример: Россия - программа надо изменить на Россия - Программа.
Делаю так, но не изменяется регистр
$name = preg_replace("/( - .{1})/", strtoupper("\$1"), $name);
|
| |
|
|
|
|
|
|
|
для: max90
(22.12.2011 в 00:25)
| | ucwords(); | |
|
|
|
|
|
|
|
для: Lotanaen
(22.12.2011 в 09:45)
| | Без изменений. Почему-то функция в регулярке не проходит. | |
|
|
|
|
|
|
|
для: max90
(22.12.2011 в 11:16)
| | уберите вообще регулярку
и сделайте так
<?php
$str = "Россия - программа";
echo ucwords(strtolower($str)); // Россия - Программа
?>
|
| |
|
|
|
|
|
|
|
для: Slo_Nik
(22.12.2011 в 11:32)
| | Не подойдет, нужно чтобы изменился регистр только первой буквы после дефиса. А у меня после дефиса и 2 и более слов. | |
|
|
|
|
|
|
|
для: max90
(22.12.2011 в 00:25)
| | Скорей всего проблемы на хостинге с локалью. Сталкивался. Попробуйте перед вызовом preg_replace установить
setlocale(LC_CTYPE,"Russian_Russia.1251")
| или, если у вас utf-8, то используйте mb_strtoupper, а в preg_replace - "/( - .{1})/u" | |
|
|
|
|
|
|
|
для: Sfinks
(22.12.2011 в 13:57)
| | Кодировка ср1251. На всякий случай сделал, что Вы советовали, не помогает.
ЗЫ. тестирую на денвере. | |
|
|
|
|
|
|
|
для: max90
(22.12.2011 в 15:33)
| | тоже пробовал решить проблему, но толком ни чего не получилось.
вернее результат есть, но криво это пока работает.
<?php
$str = "Россия - программа";
$pattern = '|[.\s]+([а-я])|';
preg_match($pattern, $str, $out );
print_r($out);// выход Array ( [0] => п [1] => п )
echo "<br />";
// применение того же РВ, но положительный результат только при windows-1251
echo preg_replace_callback($pattern, create_function('$matches', 'return strtoupper($matches[1]);'), $str); // выход Россия -Программа
?>
|
Если файл будет в кодировке "utf-8", будет установлен модификатор "u", то результат для меня странный на выходе, почему - не могу понять
<?php
$str = "Россия - программа";
$pattern = '|[.\s]+([а-я])|u';
preg_match($pattern, $str, $out );
print_r($out); // выход Array ( [0] => п [1] => п )
echo "<br />";
echo preg_replace_callback($pattern, create_function('$matches', 'return strtoupper($matches[1]);'), $str); // выход Россия - Ярограмма )))
?>
|
если во втором варианте использовать mb_strtoupper(), то вообще ни чего не работает... | |
|
|
|
|
|
|
|
для: max90
(22.12.2011 в 15:33)
| | А на win1251 попробовали mb_strtoupper() ?
Я тут отыскал функцию которую юзал вместо strtuupper() 4 года назад с теми же проблемами и у меня работало.
<?
function lowercase($str) {
$str = mb_strtolower($str);
return str_replace(array("Ё","Ч","Я"),array("ё","ч","я"),$str);
}
?>
|
| |
|
|
|
|
|
|
|
для: max90
(22.12.2011 в 15:33)
| | PS. Ну естессно lower надо на upper поменять | |
|
|
|
|
|
|
|
для: Sfinks
(22.12.2011 в 23:09)
| | Slo_Nik, с двумя словами не работает
Sfinks, переводит все буквы в верхний регистр.
Подумал тут, попытаюсь отсечь часть строки до дефиса, а остальную поместить в массив и менять первое значение массива. | |
|
|
|
|
|
|
|
для: max90
(22.12.2011 в 23:54)
| | > с двумя словами не работает
мне надо было дописать, что "можно начать отталкиваться от такого то варианта".... )))
и работает только с windows-1251. | |
|
|
|
|
|
|
|
для: Slo_Nik
(22.12.2011 в 23:57)
| | Благодаря Вам догадался использовать массивы ;)
Путем нескольких извращений сделал рабочий вариант ))
$name1 = preg_replace("/.* - /", '', $name);
$dotire = preg_replace("/ - .*/", '', $name);
$explode_name = explode( ' ', $name1 );
$explode_name[0] = ucfirst($explode_name[0]);
$implode_name = implode(" ", $explode_name);
echo $dotire ." - ".$implode_name;
|
| |
|
|
|
|
|
|
|
для: max90
(23.12.2011 в 00:06)
| | дело в том, что интересней сделать без нескольких извращений, а одним.
я пытался сделать это основываясь на информации с сайта preg_replace_callback(), но ....
по свободе надо будет разобраться с этим вопросом ))) | |
|
|
|
|
|
|
|
для: max90
(22.12.2011 в 23:54)
| | > Sfinks, переводит все буквы в верхний регистр.
Ессно все. Ее нужно было в ваш начальный вариант подставить вместо стртуаппер. Примерно так:
<?
function uppercase($str) {
$str = mb_strtoupper($str);
return str_replace(array("Ё","Ч","Я"),array("ё","ч","я"),$str);
}
$name = preg_replace("/( - .{1})/", uppercase("\$1"), $name);
?>
|
| |
|
|
|