Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Непонятки с функцией sprintf и форматом "%s/%s/%s"


Автор: Ciber SLasH 7.4.2006, 16:27
Столкнулся с такой проблемой, если определена переменная-формат $lang['DateFormat']="%s/%s/%s";, то такой кусок кода:
Код

sprintf ($lang['DateFormat'],$this->day,$this->month,$this->year);

возвращает строку не так как было задумано, а автоматически изменяет формат на "%2$s/%1$s/%3$s" и дата выглядит уже по-другому. smile

Кто-нибудь знает как это лечится без изменения переменной формата?

Автор: skalex 7.4.2006, 16:55
А покажи дамп $this ...
Код
echo '<pre>';
print_r($this);

Автор: Ciber SLasH 7.4.2006, 17:18
Переменные выводятся правильно. К примеру в лог скидывается такая инфа:
Цитата
day: 3
month: 2
year: 2006

но функция глючит как не странно в IE, в Опере всё нормально. Я конечно понимаю, что это звучит глупо, т.к. браузер не влияет на работу PHP, но факт остаётся фактом.
А решил я это безобразие так:
Код

$f = preg_replace("/[\d\$]*/", "", $lang['DateFormat']);
return sprintf ($f,$this->day,$this->month,$this->year);

короче поудалял регом все цифры и знаки доллара из формата... smile

Автор: Ciber SLasH 7.4.2006, 18:15
Однако, на этом сюрпризы не закончились...
С датами вообще полный П. Есть ещё такая переменная-формат $lang['DateTimeSPHP']="d/m H:i";, выводится дата так: echo Date($lang['DateTimeSPHP']); и опять в IE6 идут глюки и в FireFox 1.0.1, они каким-то макаром автоматически меняют положение дня и месяца в формате и формат приобретает вид m/d H:i а Opera 8.53 отображает как задумано.

Где сабака порылась? smile

Автор: Ciber SLasH 7.4.2006, 19:56
Отбой парни, я не доглядел, что у меня формат берётся в зависимости от текущей локали, а разные браузеры по разному сообщают серверу эту инфу. IE шлёт en_us, а Опера en. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)