Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как грамотно установить локаль? и где?
 
 автор: tAleks   (05.04.2007 в 19:14)   письмо автору
 
 

Без установленной локали на хостинге не работают Рег. выражения с русскими буквами.

Поставил так:

setlocale(LC_ALL, "ru_RU.cp1251", "Russian_Russia.1251");


Теперь, float-переменные имеют запятую вместо точки. Когда из них строю запрос, и добавляю в базу, в поля DECIMAL(10,2). Они из-за запятой округляются до целых.

Как и где правильно ставить локаль?
У меня сейчас эта строка, в конфиге, который подключается ко всем файлам.

   
 
 автор: cheops   (06.04.2007 в 01:58)   письмо автору
 
   для: tAleks   (05.04.2007 в 19:14)
 

Лучше в тех.поддержке хостера уточнить - на разных серверах по разному требуется указывать локаль.

   
 
 автор: XPraptor   (06.04.2007 в 02:15)   письмо автору
 
   для: cheops   (06.04.2007 в 01:58)
 

Ты локаль устанавливай не для всего на сайте LC_ALL а для конкретных величин. Тебе только для строк нужна она, вот и устанавливай только для строк:
setlocale(LC_COLLATE, ...);
setlocale(LC_CTYPE, ...);
А цифри не трожь! Иначе замучаешся флоат конвертить.

   
 
 автор: tAleks   (06.04.2007 в 11:04)   письмо автору
 
   для: cheops   (06.04.2007 в 01:58)
 

А че у них спростиь-то?
Я в этом деле новичек, и вообще не поинмаю, каким местом локаль соприкасается с сервером.

Как вопрос-то задать, тех поддержке?

   
 
 автор: cheops   (06.04.2007 в 12:24)   письмо автору
 
   для: tAleks   (06.04.2007 в 11:04)
 

Как точно должны выглядеть параметры функции setlocale() для того, чтобы установить русскую локаль для кодировки cp1251.

   
 
 автор: XPraptor   (06.04.2007 в 15:41)   письмо автору
 
   для: cheops   (06.04.2007 в 12:24)
 

tAleks - читай выше мой пост. Не устанавливай локаль для всего, а только для строковых функция. Тогда все будет работать, и флоат не изменится на запятые.

   
 
 автор: tAleks   (06.04.2007 в 15:51)   письмо автору
 
   для: XPraptor   (06.04.2007 в 15:41)
 

Ваш пост я уже учел, и исправил скрипт, спасибо!

Но, тема для меня актуальна, все-равно, т.к. не хотелось бы позже, из-за локали еще где-нибудь напороться на какой-нибудь косяк...

   
 
 автор: XPraptor   (06.04.2007 в 15:58)   письмо автору
 
   для: tAleks   (06.04.2007 в 15:51)
 

А какой косяк то? Если ты глобально хочешь менять локаль для своих скриптов, то включаешь нужные изменения в самом начале всех скриптов. А если только в определенных местах, то и включай не посредственно перед этим местом, а потом возвращай обратно на текущую.

   
 
 автор: tAleks   (06.04.2007 в 16:18)   письмо автору
 
   для: XPraptor   (06.04.2007 в 15:58)
 

Если, по честноку, то я еще не доконца догоняю вообще, что такое локаль.... и как ей ползоваться.... объяснил бы кто...

   
 
 автор: XPraptor   (06.04.2007 в 16:21)   письмо автору
 
   для: tAleks   (06.04.2007 в 16:18)
 

Локаль, это как будут обрабатываться значения строк, циферек, денежек и времени скриптами. У каждой страны свои стандарты. Вот ты и меняешь локаль, для того, чтобы по стандартам твой страны присходили расчеты величин.

   
 
 автор: Woland   (30.08.2007 в 10:59)   письмо автору
 
   для: tAleks   (05.04.2007 в 19:14)
 

Прошу прощения, смотрите следующее сообщение (случайно отправил дважды)

   
 
 автор: Woland   (30.08.2007 в 10:59)   письмо автору
 
   для: tAleks   (05.04.2007 в 19:14)
 

А можно ли сделать так, чтобы названия месяцев писались русскими буквами автоматически? Я пишу

setlocale(LC_TIME, "ru_RU", "Russian_Russia");
echo strftime("%A,");

В ответ кодировка не воспинимается (Кодировка сайта utf8), а если добавляю ".utf8", результат - английский язык.

   
 
 автор: Woland   (30.08.2007 в 13:31)   письмо автору
 
   для: 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

Может быть, есть более элегантное решение? Напишите, если кто сталкивался...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования