strtoupper некорректно переводит рус. символы (й ц у ф ы ...)

dimdimitry

Guest
strtoupper некорректно переводит рус. символы (й ц у ф ы ...)

Apache/2.0.46 (Red Hat) PHP Version 5.0.3

при попытке сделать strtoupper:

исходная строка
йцукенгшщзхъфывапролджэячсмитьбю.ё

результат
Й¦ЈКЕНГЁ©ЗҐЄ¤«ВАПрОЛДЖэЇ§ЎМИў¬Б®.ё

т.е. часть символов он поднимает а часть не хочет.
В чем бага?

установлено:
setlocale (LC_CTYPE, "ru_RU")

Спасибо.
 

dimdimitry

Guest
пробовал все доступные кодировки:
ru_RU , ru_RU.koi8r , ru_RU.utf8
в
setlocale (LC_CTYPE, "ru_RU");
не знаю куда дальше копать...
 

SiMM

Новичок
Либо ты хранишь свои данные в koi8r, либо наконец выставляешь правильную локаль CP1251.
 

dimdimitry

Guest
Куда рыть понял, спасибо!

-~{}~ 13.05.05 17:39:

Локаль создал
localedef -f CP1251 -i ru_RU ru_RU.cp1251
по locale -a | grep ru_RU её видно, а в скрипте
setlocale (LC_CTYPE, 'ru_RU.cp1251');
не подхватывает. Куда теперь копать...?

-~{}~ 13.05.05 18:15:

дальше интереснее...

setlocale (LC_CTYPE, 'ru_RU.cp1251') из скрипта подхватывает, но не всегда. Если постоянно обновлять страницу переодически переводит в верхний регистр.

echo setlocale (LC_CTYPE, 'ru_RU.cp1251');

echo '</BR>';

$a ='йцукенгшщзхъфывапролджэячсмитьбю.';

$b = strtoupper($a);

echo $a . '</BR>';
echo $b . '</BR>';

echo setlocale (LC_CTYPE, 0);

Может кто сталкивался?
 

digs

Новичок
Да напиши просто свой конвертер.
Вот например для перевода в нижний регистр
PHP:
function dlower($s){
  return strtr($s,"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ",
                  "абвгдеежзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz");

}
 
Сверху