LINUX.ORG.RU

[php] strtoupper и кирилица

 


0

1

Добрый день! Внезапно для меня появилась проблема, что функция strtoupper не работает с кириллицей. Гугл с ходу выдает решение:

setlocale(LC_ALL, 'ru_RU.UTF-8');

Перепробовал уже все доступные в системе локали (locale -a | grep ru), но нет никакого результата.

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

echo _strtoupper ('ФЫВфыв');

Моего девелопера не устраивает, говорит, что не собирается править полторы тысячи скриптов.

Подскажите, какие еще есть варианты?


>говорит, что не собирается править полторы тысячи скриптов

sed с ним не знаком? :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73
$ locale -a | grep ru
ru_RU
ru_RU.iso88595
ru_RU.koi8r
ru_RU.utf8
russian
ru_UA
ru_UA.koi8u
ru_UA.utf8
<?php

setlocale(LC_ALL, 'ru_RU.utf8');

echo mb_strtoupper ('ФЫВфыв');

?>

Выдает «ФЫВфыв»

j0ker1
() автор топика

Появилось подозрение, что «setlocale» вообще не отрабатывает.

<?php

setlocale(LC_ALL, 'ru_RU.utf8');

system('locale');

?>

Выводит:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
j0ker1
() автор топика
Ответ на: комментарий от j0ker1

php.ini

export LANG=ru_RU.UTF-8

mbstring.language = "Russian"
mbstring.internal_encoding = "UTF-8"
mbstring.http_input = "UTF-8"
mbstring.http_output = "UTF-8"
cd /usr/lib/locale
localedef -f UTF-8 -i en_US ./en_US.UTF-8
localedef -f UTF-8 -i ru_RU ./ru_RU.UTF-8
AGUtilities ★★★
()
Ответ на: комментарий от AGUtilities

А у меня с ними заработало. Спасибо! Извиняюсь за занудство, но все же можно ли сделать это через strtoupper, а не mb_strtoupper, чтоб не заставлять девелопера править свои файлы?

j0ker1
() автор топика
Ответ на: комментарий от j0ker1

>Извиняюсь за занудство, но все же можно ли сделать это через strtoupper, а не mb_strtoupper

php.ini:
mbstring.func_overload = 2

KRoN73 ★★★★★
()
Ответ на: комментарий от Nxx

>Кириллица не нужна же

Нахрена тогда эта фраза написана на кириллице?

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.