|
|
|
| Без установленной локали на хостинге не работают Рег. выражения с русскими буквами.
Поставил так:
setlocale(LC_ALL, "ru_RU.cp1251", "Russian_Russia.1251");
|
Теперь, float-переменные имеют запятую вместо точки. Когда из них строю запрос, и добавляю в базу, в поля DECIMAL(10,2). Они из-за запятой округляются до целых.
Как и где правильно ставить локаль?
У меня сейчас эта строка, в конфиге, который подключается ко всем файлам. | |
|
|
|
|
|
|
|
для: tAleks
(05.04.2007 в 19:14)
| | Лучше в тех.поддержке хостера уточнить - на разных серверах по разному требуется указывать локаль. | |
|
|
|
|
|
|
|
для: cheops
(06.04.2007 в 01:58)
| | Ты локаль устанавливай не для всего на сайте LC_ALL а для конкретных величин. Тебе только для строк нужна она, вот и устанавливай только для строк:
setlocale(LC_COLLATE, ...);
setlocale(LC_CTYPE, ...);
А цифри не трожь! Иначе замучаешся флоат конвертить. | |
|
|
|
|
|
|
|
для: cheops
(06.04.2007 в 01:58)
| | А че у них спростиь-то?
Я в этом деле новичек, и вообще не поинмаю, каким местом локаль соприкасается с сервером.
Как вопрос-то задать, тех поддержке? | |
|
|
|
|
|
|
|
для: tAleks
(06.04.2007 в 11:04)
| | Как точно должны выглядеть параметры функции setlocale() для того, чтобы установить русскую локаль для кодировки cp1251. | |
|
|
|
|
|
|
|
для: cheops
(06.04.2007 в 12:24)
| | tAleks - читай выше мой пост. Не устанавливай локаль для всего, а только для строковых функция. Тогда все будет работать, и флоат не изменится на запятые. | |
|
|
|
|
|
|
|
для: XPraptor
(06.04.2007 в 15:41)
| | Ваш пост я уже учел, и исправил скрипт, спасибо!
Но, тема для меня актуальна, все-равно, т.к. не хотелось бы позже, из-за локали еще где-нибудь напороться на какой-нибудь косяк... | |
|
|
|
|
|
|
|
для: tAleks
(06.04.2007 в 15:51)
| | А какой косяк то? Если ты глобально хочешь менять локаль для своих скриптов, то включаешь нужные изменения в самом начале всех скриптов. А если только в определенных местах, то и включай не посредственно перед этим местом, а потом возвращай обратно на текущую. | |
|
|
|
|
|
|
|
для: XPraptor
(06.04.2007 в 15:58)
| | Если, по честноку, то я еще не доконца догоняю вообще, что такое локаль.... и как ей ползоваться.... объяснил бы кто... | |
|
|
|
|
|
|
|
для: tAleks
(06.04.2007 в 16:18)
| | Локаль, это как будут обрабатываться значения строк, циферек, денежек и времени скриптами. У каждой страны свои стандарты. Вот ты и меняешь локаль, для того, чтобы по стандартам твой страны присходили расчеты величин. | |
|
|
|
|
|
|
|
для: tAleks
(05.04.2007 в 19:14)
| | Прошу прощения, смотрите следующее сообщение (случайно отправил дважды) | |
|
|
|
|
|
|
|
для: tAleks
(05.04.2007 в 19:14)
| | А можно ли сделать так, чтобы названия месяцев писались русскими буквами автоматически? Я пишу
setlocale(LC_TIME, "ru_RU", "Russian_Russia");
echo strftime("%A,");
|
В ответ кодировка не воспинимается (Кодировка сайта utf8), а если добавляю ".utf8", результат - английский язык. | |
|
|
|
|
|
|
|
для: Woland
(30.08.2007 в 10:59)
| | В принципе, нашел решение, но оно довольно громоздко:
function win2utf($s){
$c209 = chr(209); $c208 = chr(208); $c129 = chr(129);
for($i=0; $i<strlen($s); $i++) {
$c=ord($s[$i]);
if ($c>=192 and $c<=239) $t.=$c208.chr($c-48);
elseif ($c>239) $t.=$c209.chr($c-112);
elseif ($c==184) $t.=$c209.$c209;
elseif ($c==168) $t.=$c208.$c129;
else $t.=$s[$i];
}
return $t;
}
//$dat['mont'] - Номер месяца
setlocale(LC_TIME, 'ru_RU@euro', 'ru_RU', 'rus_RUS');
$a=$dat['mont'].'/'.date('d').'/'.date('Y');
$mont_name=win2utf(strftime("%B",strtotime($a)));
|
В результате получаем имя месяца в кодировке UTF8
Может быть, есть более элегантное решение? Напишите, если кто сталкивался... | |
|
|
|