Кодировка клиент!=сервер

dr Tr0jan

Guest
Кодировка клиент!=сервер

У меня опять трабл (дык, как же без этого)
Дело в том, что в моем скрипте новостей все данные отображаются как windows-1251, кроме даты.
Дата (int timestamp) находится в базе и извлекается, как переменная $db_date:
PHP:
  $db_date = mysql_result($result, 0, 'news_time');
  setlocale(LC_TIME, 'ru');
  $news_date = strftime("%d %B %Y, %A", $db_date);
Так вот из-за локали и весь глюк: время почему-то на разных серверах отображается в разной кодировке: дома windows-1251, а у хостера koi8-r. Поэтому хочу задать вопрос, как сделать, чтобы время всегда отображалось в windows-1251.
 

Фанат

oncle terrible
Команда форума
устанавливай локаль не абстрактную "ру", а конкретно 1251.
Хотя по-моему, чем париться с локалями, ГОРАЗДО проще и гибче писать название месяца руками.
 

dr Tr0jan

Guest
> устанавливай локаль не абстрактную "ру", а конкретно 1251.
PHP:
setlocale(LC_TIME, 'windows-1251');
- не канает
 

neko

tеam neko
какое упорство
сходи лучше в поиск по setlocale
наверное одна из 10ти часто поднимаемых тем
 

Demiurg

Guest
>setlocale(LC_TIME, 'windows-1251');
а счего ты взял, что такая локаль существует ?
 

Profic

just Profic (PHP5 BetaTeam)
Угу скоро он пребежит с спросит а как сделать одинаково и под виндой и под линухом :)
Модеры
http://phpclub.ru/talk/showthread.php?postid=348005#post348005
Вот-тут я приводил кусок кода, который работает и под Unix и под Windows. Может его в избранное/фак и всех на него посылать? (код, а не фак:))
 

neko

tеam neko
данный код, при наличии на машине самой локали ru_RU.CP1251
гыгы
а просто setlocale( LC_ALL, 'ru_RU.CP1251' );
вместо того, что ты наворотил там
несудьба чтоли?

-~{}~ 12.07.04 17:44:

да, надо

аргументирую:
php 4.3.6
win2k

setlocale( ..., 'ru' ) - делает что надо
код Profic пишет что надо проверить правильность установки локали.

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

neko

tеam neko
imho надо делать вот как

setlocale( LC_ALL, 'ru', 'ru_RU.CP1251', ..., ... );

вместо точек добавить кучу разных вариаций под которыми в разных осях существует русский язык

туповато конечно, но просто и работает если впихнуть побольше вариантов

-~{}~ 12.07.04 17:51:

Фанат

по твоему стоит вытаскивать наверх топик 3х недельной давности?
советуют то тут, а не там

-~{}~ 12.07.04 18:03:

кстати если из этого самого кода убрать die()
то он начинает работать

и по сути становится эквивалентен:
setlocale( LC_ALL, '' );
 

fixxxer

К.О.
Партнер клуба
Тогда уж, setlocale('ru_RU.CP1251', 'ru_RU', 'ru').
Ибо 'ru'/'ru_RU' - не обязательно 1251, хотя часто и так.
 

Profic

just Profic (PHP5 BetaTeam)
neko
1) Там, где нужно работать с плавающей точнкой юзать LC_ALL не реккомендуется (из-за LC_NUMERIC)
2) Множественное указание локалей появилось только в php4.3.0. К чему это? Да к тому, что этот родился для младшей версии.
3) Даже вариант твой с множественным указанием локалей для нормальных програм не является правильным. Имхо правильно использовать вообще только пустую строку для второго параметра.
4) Насчёт проверки, согласен, перемудрил :)
5) Кстати этот код был из 2 частей: 1-е две сроки - из файла с установками; остальные - из инициализации.

ЗЫ. Посмотри любой гнушный софт (кстати php тоже) - там в начале setlocale (LC_... (но обычно не ALL), ''); для нужных категорий. Именно с оглядной на него и писал этот код.

Я все сказал. :)

-~{}~ 12.07.04 18:46:

fixxxer
ru/ru_RU в Unix системах по умолчанию ISO :)
 

dr Tr0jan

Guest
> а счего ты взял, что такая локаль существует ?
Фанат чего-то пытался объяснить.

> Угу скоро он пребежит с спросит а как сделать одинаково и под виндой и под линухом
Ну это и подразумевалось в вопросе.

Спасибо за внимание.
Мне подошло: setlocale(LC_TIME, 'ru_RU.CP1251', 'ru_RU', 'ru');
Все, тема закрыта.

-~{}~ 21.09.04 15:20:

Млин, приходится возобновить тему!
До поры, до времени все работало отлично. Но все когда-то ломается...
Приехал я с отпуска и обнаружил, что хостер опять сменил кодировку, теперь дата отображается в ISO-8859-5.
Как можно осуществить, что бы дата отображалась правильно на любом сервере?
З.Ы. Описывать самому не предлагать.
 
Сверху