PHP5 и кодировка cp1251

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

PHP5 и кодировка cp1251

Непрочитанное сообщение kharkov_max » 2010-11-05 12:36:24

День добрый.

Занимаюсь переносом сайта с Windows на freebsd.

Сайт удачно переехал, но обнаружил проблему которую не могу побороть.
Под виндой умные люди на сайт выкладывали картинки с русскими именами.
Похоже что админка сайта их не понимала, или по каким то другим причинам, эти файлы были сохранены на диск c именами в кракозябрах (в UTF-8).
В этих же кракозябрах видны в ссылках на эти картинки непосредственно на сайте под виндой.

Под freebsd сайт говорит что не может найти на диске нужного файла.
Сайт писан на PHP с использованием шаблонизатора smarty.
Там задейстрован Mysql и т.д.

Конечно было бы логично переименовать файлы и изменить в MYSQL ссылки на файлы, но в MYSQL эти ссылки хранятся в таком виде, что задача превратится в очень большую проблему (в базе ссылки и имена файлов текст, все в перемешку).
Так же можно через админку на текущем, рабочем сайте, переименовать эти картинки и загрузить назад на сайт.
Но их много, они лежат в разных местах и т.д. получится очередная проблема.

Выход один, если он возможен... Заставить сайт видеть то что уже есть на диске.
Имена файлов в UTF-8, при помощи convmv могу переименовывать в любую кодировку, но мне нужно видить то что лежит на диске в UTF-8, в кодировке винды cp-1251.

Если я через putty в mc смотрю на диск в кодировке cp1251 то вижу нужные мне имена этих корявых файлов.

Подскажите как заставить PHP смотреть на диск в cp1251?
Примеры из Google пробовал - не помогло ...
Может шаблонизатор сайта как то перекрывает мои настройки php ...
Последний раз редактировалось f_andrey 2010-11-05 13:12:09, всего редактировалось 1 раз.
Причина: Автору, выбирайте пожалуйста раздел соответствуюший тематике вашего сообщения.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Re: PHP5 и кодировка cp1251

Непрочитанное сообщение kharkov_max » 2010-11-08 8:13:40

Немного продвинулся, в понимании причины проблемы.

Написал на PHP скрипт который отображает список файлов папки.
Был приятно удивлен, что файлы видятся в правильной кодировке.

Т.е. имя файла в ссылке сайта, совпадает с именем файла на диске.
Но !!!
В именах файлов на диске встречаются символы типа %20, вот такие спец символы PHP или Apache восприимает, к примеру, как пробел.
Получается что Apache не может найти именно такие файлы.

Незнаю есть ли выход из этой ситуации, но все же спрошу.

Как научить Apache или PHP видеть нормально такие файлы ?

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: PHP5 и кодировка cp1251

Непрочитанное сообщение FreeBSP » 2010-11-08 9:00:14

%20 это urlencoded пробел
правильнее переименовать файлы чтобы в именах вообще не было urlencoded частей
навскидку - что то типа этого

Код: Выделить всё

sh -c 'find ./ | { while read str; do mv $str `echo $str | sed "s/%20/ /g"`; done;}'
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
kharkov_max
капитан
Сообщения: 1810
Зарегистрирован: 2008-10-03 14:56:40

Re: PHP5 и кодировка cp1251

Непрочитанное сообщение kharkov_max » 2010-11-08 11:29:11

FreeBSP писал(а):%20 это urlencoded пробел
правильнее переименовать файлы чтобы в именах вообще не было urlencoded частей
навскидку - что то типа этого

Код: Выделить всё

sh -c 'find ./ | { while read str; do mv $str `echo $str | sed "s/%20/ /g"`; done;}'
Ну это уже понятно, куда нужно двигать.
Только покоя не дает вопрос, ведь под Windows апач на диске нормально видел такие файлы ...
Под Windows у файлов такие же корявые названия, в unix они перенеслись без изменений...

Может есть опция какая нить для Apache на такие случаи?