strtoupper и кирилица

RUNET

Новичок
strtoupper и кирилица

Собственно столкнулся с проблемой что функция strtoupper не хочет переводить русские буковки в верхний регистр :(

потом нашел функцию mb_strtoupper
написано что работает в версии выше 4.3.0, у меня 4.4.4 и функция не найдена :(

вобщем нашел такое вот решение...

PHP:
function str_to_upper($str){
    return strtr($str, 
    "abcdefghijklmnopqrstuvwxyz".
    "\xE0\xE1\xE2\xE3\xE4\xE5".
    "\xb8\xe6\xe7\xe8\xe9\xea".
    "\xeb\xeC\xeD\xeE\xeF\xf0".
    "\xf1\xf2\xf3\xf4\xf5\xf6".
    "\xf7\xf8\xf9\xfA\xfB\xfC".
    "\xfD\xfE\xfF",
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
    "\xC0\xC1\xC2\xC3\xC4\xC5".
    "\xA8\xC6\xC7\xC8\xC9\xCA".
    "\xCB\xCC\xCD\xCE\xCF\xD0".
    "\xD1\xD2\xD3\xD4\xD5\xD6".
    "\xD7\xD8\xD9\xDA\xDB\xDC".
    "\xDD\xDE\xDF");
}
сталкивался кто с такой проблемкой ? и кто как решал..интересно
 

Апокалипсис

тех дир matras.ru
Нужно настроить локаль, тогда strtoupper будет корректно работать.
Как настроить -> [m]setlocale[/m]
 

SiMM

Новичок
> написано что работает в версии выше 4.3.0, у меня 4.4.4 и функция не найдена
[m]mbstring[/m]
 

RUNET

Новичок
Апокалипсис - попробывал, не помогло.

SiMM - а слона то я и не заметил :)
 

Gorynych

Посетитель PHP-Клуба
RUNET

setlocale(LC_ALL, array('ru_RU.CP1251', 'rus_RUS.1251')); - не помогло?
 

RUNET

Новичок
Gorynych
пасиб, заработало с 'rus_RUS.1251' ... странно как то... почему ru_RU не понимает
 

Активист

Активист
Команда форума
Локаль обязательно ставить и для правильной работы регулярных выражений
Написал скрипт установки лакали из множества возможных
PHP:
// Setting up system locale
$locales   = array("ru_RU.CP1251", "ru_RU.cp1251", "ru_RU", "RU");
$localeSet = false;
foreach ($locales as $localeName) {
	if ((bool)$localeSet === false) {
		// setting up locase
		setlocale(LC_ALL, $localeName);
	}
	// check locale
	if ((bool)$localeSet === false && strtolower("qwertyёЁАБГДЯQWERTYZ") == "qwertyёёабгдяqwertyz") {
		// locale setup correctly
		$localeSet = true;
	}
}
if ((bool)$localeSet !== true) {
	// exiting now
	echo "Can't set up server locale to cp1251 character set at ".__FILE__." on ".__LINE__;
	exit();
}
-~{}~ 18.04.07 13:04:

Интересно, где эт такая локаль?
rus_RUS.1251
Ни на одной *nix системы такого не видел ;)
 

Gorynych

Посетитель PHP-Клуба
раньше пример с таким выставлением русской локали был среди комментариев к setlocale, сейчас можно полюбоваться на http://ru2.php.net/manual/ru/ref.datetime.php это, вроде, хвостик от ISO 3166. Заметьте - кодовая страница указывается по номеру, без "cp".
 

ohppc

Новичок
У меня та же проблема, но с нюансом: текст записывается в файлик в кодировке utf-8. Подскажите, как организовать регистронезависимый поиск слова в этом тексте для любого языка?
Например, есть строка "Вася любит рыбу.", а искомое слово в нижнем регистре "вася". Будь текст английским, я бы перевел текст в нижний регистр и нашел бы через strpos(). Но русское слово "Вася" в "вася" не переводится. Есть ли унивесальное решение, для всех основных языков?
 

RUNET

Новичок
Автор оригинала: ohppc
У меня та же проблема, но с нюансом: текст записывается в файлик в кодировке utf-8. Подскажите, как организовать регистронезависимый поиск слова в этом тексте для любого языка?
Например, есть строка "Вася любит рыбу.", а искомое слово в нижнем регистре "вася". Будь текст английским, я бы перевел текст в нижний регистр и нашел бы через strpos(). Но русское слово "Вася" в "вася" не переводится. Есть ли унивесальное решение, для всех основных языков?
ну или так 6)))))))))

PHP:
function str_to_lower($str){ 
    return strtr($str,  
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ". 
    "\xC0\xC1\xC2\xC3\xC4\xC5". 
    "\xA8\xC6\xC7\xC8\xC9\xCA". 
    "\xCB\xCC\xCD\xCE\xCF\xD0". 
    "\xD1\xD2\xD3\xD4\xD5\xD6". 
    "\xD7\xD8\xD9\xDA\xDB\xDC". 
    "\xDD\xDE\xDF",
    "abcdefghijklmnopqrstuvwxyz". 
    "\xE0\xE1\xE2\xE3\xE4\xE5". 
    "\xb8\xe6\xe7\xe8\xe9\xea". 
    "\xeb\xeC\xeD\xeE\xeF\xf0". 
    "\xf1\xf2\xf3\xf4\xf5\xf6". 
    "\xf7\xf8\xf9\xfA\xfB\xfC". 
    "\xfD\xfE\xfF");
}
 

OZ

Новичок
ohppc, содержимое файла переведи в нижний регистр чере mbstring и ищи. только так.
 
Сверху