|
|
|
| Для получения даты, из формата time() всегда пользовался функцией date("d.m.Y", time())
Понадобилось писать месяц словом, по-русски!
Но в одной из тем на фоурме, нашёл скрипт:
setlocale(LC_TIME, 'Russian_Russia.1251');
echo strftime('%d %Bа %Y', $time);
Вопрос на засыпку, почему так редко встречаю использование данной функции? Есть какие то ограничения? В чём подвох? Работает медленее? | |
|
|
|
|
|
|
|
для: Diablo_
(04.08.2009 в 20:41)
| | %Bа - это как? | |
|
|
|
|
|
|
|
для: Trianon
(04.08.2009 в 21:35)
| | ну выводится то "Август" "Сентябрь" это я для Августа буковку "а" подставил))) | |
|
|
|
|
|
|
|
для: Diablo_
(04.08.2009 в 22:01)
| | А не проще сразу подставлять "Августа"? У тебя и так, и так зависимость от текущего месяца (для Сентября уже подставить буковку не выйдет). Лучше, IMHO, писать обёртку вокруг strftime(). | |
|
|
|
|
автор: ...... (04.08.2009 в 21:40) |
|
|
для: Diablo_
(04.08.2009 в 20:41)
| | не везде работает,
и строка 'Russian_Russia.1251' может иметь например такой "ru_RU.1251" формат на некоторых системах | |
|
|
|
|
|
|
|
для: ......
(04.08.2009 в 21:40)
| | Вот нашел тему через поиск, но у меня другая проблема. Название месяца выводится локально на компе все нормально, а вот на хостинге крякозябрами. Как поставить нормальную кодировку.
<?php
setlocale(LC_TIME, "russian");
print strftime("%B");
?>
|
Заранее спасибо | |
|
|
|
|
|
|
|
для: magic
(08.02.2010 в 19:39)
| | Уточните у хостера название русской локали. | |
|
|
|
|
|
|
|
для: Diablo_
(04.08.2009 в 20:41)
| | Подвох в том, что нельзя однозначно настроить локаль так, чтобы она работала везде одинаково. | |
|
|
|
|
|
|
|
для: Саня
(08.02.2010 в 22:32)
| | А как тогда быть, кроме как спросить у хостера? Может проверить хостера с помощью какой-то функции и подстроиться под них? Может можно увидеть через phpinfo | |
|
|
|
|
|
|
|
для: magic
(08.02.2010 в 23:38)
| |
<?
system('locale -a | grep ru'); // так
system('ls /usr/share/locale | grep ru'); // или так
| Я почти уверен, что system() и её аналоги запрещены на вашем хостинге. | |
|
|
|
|
|
|
|
для: Саня
(09.02.2010 в 00:36)
| | Да, действительно отключены для безопасности. Что делать, как быть? Может еще что-то есть. Как-то решается эта проблемка? | |
|
|
|
|
|
|
|
для: magic
(09.02.2010 в 01:15)
| | Вы боитесь общаться с хостингом? | |
|
|
|
|
|
|
|
для: Саня
(09.02.2010 в 07:01)
| | Да нет в принцепе. Надо узнать какую они используют кодировку? Я правильно понял. Так это относится ко всему сайту? Для 100% уверенности, что не вылезут крякозябры, наверно надо на всех страницах использовать их кодировку? | |
|
|
|
|
|
|
|
для: magic
(09.02.2010 в 09:11)
| | Кодировка и локаль — разные вещи, но они не навязываются хостингом. Вы вольны использовать любую существующую кодировку. Она не зависит от операционной системы и её настроек, на которой крутится сайт. Так же вы можете использовать любую существующую локаль. Главное чтобы она была установлена на сервере и знать как называется.
Попробуйте этот код:
<?
setlocale(LC_ALL, array('ru_RU.CP1251', 'rus_RUS.1251'));
|
| |
|
|
|
|
|
|
|
для: Саня
(09.02.2010 в 09:32)
| | > Главное чтобы она была установлена на сервере и знать как называется.
Впрочем, даже это не обязательно. Существуют реализации механизма локалей на чистом PHP. | |
|
|
|
|
|
|
|
для: magic
(09.02.2010 в 09:11)
| | Кодировку Вы можете применять какую угодно.
Нужно узнать как у них именуются идентификаторы локализации (как называются локали) - для тех кодировок, которые Вас интересуют к применению. Жесткого стандарта на эти именования, к сожалению, нет. | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2010 в 09:32)
| | Получается если вписывать что-то отличное от "russian", то сразу все выводится на английском. А можно получить хоть намек на то, как реализовать механизм локалей на PHP. Кстати вот так тоже выходят крякозябры
<?setlocale(LC_ALL, 'ru_RU', 'rus_RUS');?>
|
А вот так на английском
<?setlocale(LC_ALL, array('ru_RU.CP1251', 'rus_RUS.1251'));?>
|
| |
|
|
|
|
|
|
|
для: magic
(09.02.2010 в 12:06)
| | Кодировка в заголовках сайта совпадает с фактической? | |
|
|
|
|
|
|
|
для: Саня
(09.02.2010 в 12:11)
| | Заголовки у меня вот такие
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="content-language" content="ru">
|
Страницы отображаются нормально. А вот в календаре месяц выходит коряво. Календарь у меня индклудится к странице, но я так понимаю что кодировка страницы переходит и на календарь. | |
|
|
|
|
|
|
|
для: magic
(09.02.2010 в 12:25)
| | Как выглядят крякозябры? | |
|
|
|
|
|
|
|
для: magic
(09.02.2010 в 12:25)
| | Вот так
ДХТаРЫм 2010 г.
это типа февраль 2010г. | |
|
|
|
|
|
|
|
для: magic
(09.02.2010 в 12:51)
| | Видимо данные в русской локали на сервере вашего хостера закодированы в ISO 8859-5.
Нужно прогнать результат функции strftime() через iconv():
<?php
$x = "ДХТаРЫм";
print iconv('iso-8859-5', 'cp1251', $x);
|
Это, кстати говоря, ещё один минус strftime() — изначально неизвестно в каких кодировках хранятся локали на сервере. | |
|
|
|
|
|
|
|
для: Саня
(09.02.2010 в 13:07)
| | Вроде работает. Но теперь на локалке отображаются крякозябры, а на хосте нормально пишет. Все же нельзя разве чтоб по людски везде было? Извиняюсь конечно за назойливость. | |
|
|
|
|
|
|
|
для: magic
(09.02.2010 в 13:18)
| | Значит локаль на локалке закодирована не в ISO 8859-5.
Теперь вы понимаете почему strftime() не популярен? :)
Если не хотите проблем с strftime(), то сделайте так:
<?
$mon = array(1 => 'Январь', 'Февраль', 'Март',
'Апрель', 'Май', 'Июнь',
'Июль', 'Август', 'Сентябрь',
'Октябрь', 'Ноябрь', 'Декабрь');
print $mon[date('n')];
|
Очень хорошее решение, если нужно получить только название месяца. | |
|
|
|
|
|
|
|
для: Саня
(08.02.2010 в 22:32)
| | . | |
|
|
|
|
|
|
|
для: magic
(08.02.2010 в 23:39)
| | что ты с этой локализацией паришься. Я бы date использовал. Хотя бы ради того, что он переносимая, и проблем с ней не возникает. | |
|
|
|
|
|
|
|
для: admiral
(09.02.2010 в 13:28)
| | Спасибо всем за помощь. Будем пробывать. | |
|
|
|