Кодировка имен файлов в Windows

Добрый день,

У меня apache+PHP+Joomla установлены на Windows 7 сервер. Имена файлов (например в "media manager" Joomla) отображаются в windows-1251, в то время как весь сайт в UTF-8. Таким образом получаются крокозябры, т.к. имена файлов выводятся в windows-1251 (если сменить кодировку на web-старнице с UTF-8 на windows-1251 - то они правильно отображаются). Я бы мог преобразовать кодировку с помощью php (напр. mb_convert_encoding), перед выводом в html, но я использую Joomla и я не могу ее переписать. Можно ли заставить windows, который хранит (с 2000-ой версии) имена фалов в UTF-16 отдавать их php в UTF-8, а не в windows-1251. в региональных стандартах есть настройка "lanuage for non unicode program", которая говорит о том, на каком языке должна система взаимодействовать с прикладными программами. У меня там выбран Русский - наверно, поэтому у меня и отдается в windows-1251. Может быть можно заставить PHP отображать имена в utf8 (adddefaultcharset utf-8 я уже прописывал)? (На Linux при тех же настройках выводилось нормально)
 

Absinthe

жожо
А по какой причине выставите на сервер Windows 7, которая не является серверной ОС?
Не делайте глупости и запускайте код на юник-подобный ОС.
 

AnrDaemon

Продвинутый новичок
Начать с того, что PHP не поддерживает уникод… именно поэтому в первую очередь у вас имена файлов в 1251.
Иначе были бы в любой кодировке, в которую захочет сконвертировать из UTF-16.

P.S.
Про юникс-подобные оси тоже можно долго и со вкусом спорить.
Мне тут достался сайт, у которого ФС в koi8-r >.<
 

Absinthe

жожо
Начать с того, что PHP не поддерживает уникод… именно поэтому в первую очередь у вас имена файлов в 1251.
Нет такой связи на самом деле.

Мне тут достался сайт, у которого ФС в koi8-r >.<
А мне еще давно доставались с экзотической кодировкой в базе и шаблонах (1251). Сайт был не очень большим, и за несколько часов все было исправлено.
 

Активист

Активист
Команда форума
NTFS может быть как в CP866, KOI8-R, UTF-8 или CP1251 (зависит от локали). Зачастую достаточно использовать функции UTF8_DECODE и UTF8-ENCODE для корректной перекодировки имен файлов из/в UTF-8. Причем вам нужно ДОПИЛИТЬ вашу ЦМС

ЗЫ: С чего это PHP не поддерживает UTF-8? В какой кодировке сохраняли, в той и записано.
Код:
keeper@keeper:~$ cd tmp/
keeper@keeper:~/tmp$ ls -lash
итого 8,0K
4,0K drwxr-xr-x  2 keeper keeper 4,0K май 20 09:36 .
4,0K drwxr-xr-x 55 keeper keeper 4,0K май 20 09:36 ..
keeper@keeper:~/tmp$ touch 'Привет :)';
keeper@keeper:~/tmp$ locale
LANG=ru_RU.UTF-8
LANGUAGE=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
keeper@keeper:~/tmp$ php -a
Interactive mode enabled

php > var_dump(glob('.'));
array(1) {
  [0] =>
  string(1) "."
}
php > var_dump(glob('*'));
array(1) {
  [0] =>
  string(15) "Привет :)"
}
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
NTFS работает в UTF-16, если на то пошло. А функции работы с ней либо однобайтовые, либо не.
По умолчанию, если не указано обратного, система подсовывает однобайтовые результаты.
 
Сверху