Страница 1 из 1

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

Добавлено: 2010-11-05 12:36:24
kharkov_max
День добрый.

Занимаюсь переносом сайта с 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 ...

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

Добавлено: 2010-11-08 8:13:40
kharkov_max
Немного продвинулся, в понимании причины проблемы.

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

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

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

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

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

Добавлено: 2010-11-08 9:00:14
FreeBSP
%20 это urlencoded пробел
правильнее переименовать файлы чтобы в именах вообще не было urlencoded частей
навскидку - что то типа этого

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

sh -c 'find ./ | { while read str; do mv $str `echo $str | sed "s/%20/ /g"`; done;}'

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

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

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

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

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