Не работает upper и lower в Smarty

  • Автор темы Alik2010
  • Дата начала

Alik2010

Guest
Не работает upper и lower в Smarty

Не знаю точно, в тот ли форум я поместил топик, но все же...

Собственно вот в чем проблема: из php-скрипта происходит запрос к БД MSSQL, при выводе на экран нужно некоторые строки преобразовать к верхнему или нижнему регистру. И вот собственно это и не получается. Ни lower ни upper не работают. На локальной машине (БД MySQL) все работает нормально.
Подскажите, как такую ситуацию исправить.
 

kvf77

Red Devil
Alik2010

причем тут MySql - какое отношение она имеет к lower в смарти?
какая кодировка текста?
 

Alik2010

Guest
MySQL я указал на всякий случай.
Мне просто кажется, что проблема не в сматри, а с кодировками. В MSSQL кодировка кажется досовская (по крайней мере мне так сказали). Вот собственно, как эти данные правильно обрабатывать? В эксплорере все отображается нормально, а вот lower не работает.
 

ForJest

- свежая кровь
1. Проверь, есть ли каталог plugins
2. Проверь, установлена ли переменная SMARTY_DIR
3. Объсни что значит "не работает" - выдаёт ошибку или пустую строку или ещё что?
 

Alik2010

Guest
to ForJest
Все нужные каталоги есть. С переменными тоже проблем нету (на локальной машине все работает)

"Не работает" в данном случае означает, что не происходит перевода строки к нижнему регистру. Ошибок не выдается. Просто не происходит замены и все.

to alexhemp
setlocale зделать в смысле?
 

Антон Попов

Новичок
Проблема по всей видимости происходит только с русским языком. Для того, чтобы это исправить есть 2 пути:
1. Изменить сам модификатор, вызывать в нем str_replace(array('АБВГДЕ...'), array('абвгде...'), $var);
2. В приложении вызвать setlocale() с соответствующими параметрами, чтобы использовалась правильная кодовая страница, но это оказывается не так то просто сделать иногда, так как для разных операционных систем кодовые страницы обозначаются разными константами.
 

alexhemp

Новичок
Антон Попов
Не надо ничего менять.
Нужно просто прочитать документацию к setlocale и задать массив возможных значений, тогда скрипт будет портабелен.

наподобии setlocale(LC_ALL, array('ru_RU', 'ru_RU.CP1251', ...))

Написать свой модификатор можно конечно, но что ты будешь делать когда в следующем приложении нужно будет использовать UTF-8?

Использовать нужно штатные средства а не изобретать костыли по любому поводу.
 

ForJest

- свежая кровь
alexhemp
А локали на всех хостингах подряд как определять?
Хотя можно вынести в настроечный файл.
 

alexhemp

Новичок
ForJest

Не только можно, а нужно! Вариантов названия локалей не так много. На конкретном хостинге чаще всего написано как они называются.

И всяко лучше пользоваться setlocale чем заменять системные ф-ции на свои костыли.
 
Сверху