[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Имя сохраняемого файла -> почему utf-8 бьется?
GydruS
Здравствуйте, профессионалы!

Подскажите, как заставить php сохранять "русский_имадж.jpg", именно с таким именем, а не с "СЂСѓСЃСЃРєРёР№_имадж.jpg"?

HTML-страница в utf-8. Все ее заголовки соответствующие. у тега Form стоит аттрибут accept-charset="utf-8". Так вот, когда отправляю через эту форму "русский_имадж.jpg", то в БД он попадает корректно - с таким же именем, а вот на жесткий диск сохраняется в однобайтовой последовательности... Сервер Win 2k3, php 5.3, apache 2.2
Сохранение происходит, грубо говоря так:
move_uploaded_file($_FILES[$ImagesKeyName]['tmp_name'][$i], $path.'/'.$_FILES[$ImagesKeyName]['name'][$i]);

Как быть? Что делать?



Спустя 2 часа, 13 минут, 38 секунд (9.12.2010 - 15:19) linker написал(а):
Виндовая файловая система ничего не знает про кодировку utf-8, а потому хранит имена файлов в кодировке windows-1251.

Спустя 22 минуты, 47 секунд (9.12.2010 - 15:42) GydruS написал(а):
Цитата (linker @ 9.12.2010 - 12:19)
Виндовая файловая система ничего не знает про кодировку utf-8, а потому хранит имена файлов в кодировке windows-1251.

Если говорить о FAT, то да!
Но если говорить о NTFS - то для нее нативной является кодировка UTF 16.
Начинаю думать о том, что в php для работы с файлами под виндой использовали исключительно WinAPI-ANSI-функции, вместо их "W" вариантов...

Блин, неужели, чтобы понять это, придется лезть в исходники php?..

Спустя 1 час, 34 минуты, 55 секунд (9.12.2010 - 17:17) linker написал(а):
Не велика разница, utf-8 и utf-16 не идентичны. Ну значит тебя спасет iconv() если я не ошибаюсь.

Спустя 13 минут, 2 секунды (9.12.2010 - 17:30) GydruS написал(а):
linker, да, спасибо за наводку =) я тут, временно, именно так проблему и решил:
$uploadfile = $path.'/'.$_FILES[$ImagesKeyName]['name'][$i];
$uploadfileWinName = iconv('utf-8','windows-1251',$uploadfile);
if(move_uploaded_file($_FILES[$ImagesKeyName]['tmp_name'][$i], $uploadfileWinName))

Но, сами понимаете - это через зад как-то. Ибо что будет, если во входном имени будут не русские символы, а, скажем, китайские иероглифы? Как быть тогда? Ведь в БД они попадут иероглифами, а в файловую систему чем?

Спустя 10 минут, 40 секунд (9.12.2010 - 17:41) linker написал(а):
Попробуй конвертить в utf-16.

Спустя 11 минут, 56 секунд (9.12.2010 - 17:53) novik_sasha написал(а):
а не проще написать перекодировщик с кирилици в латинницу? типа "привет" в "privet"

Спустя 53 минуты, 23 секунды (9.12.2010 - 18:46) twin написал(а):
Что за идея заставлять китайцев говорить по русски?
Лучше, чем "холёсёнатася" от них редко что получается добиться.
novik_sasha Правильно сказал - транслитерация поможет. Не стоит судьбу искушать.

Спустя 3 часа, 19 минут, 17 секунд (9.12.2010 - 22:05) GydruS написал(а):
linker, спасибо большое - конвертинг в utf-16 вроде проканал. Правда - теперь, похоже, придется конверить имена файлов перед любым вызовом любой файловой функции...

novik_sasha, может и проще, но задача именно сохранить начальные имена файлов.

twin, а как же "Модная фасон, карифана! Бели! Осеня каласо!" Наверное, это главная фраза всего Суйфуньхе. По крайней мере, именно ее я слышал чаще всего =)
А если по делу - то такова задача - сделать код универсаньм. Чтобы и наш брат мог, и азиатский чел.
По мне, так я вообще за исключительное использование только англ. символов в именах файлов. Но юзеры и заказчики попадаются разные...

Спустя 19 минут, 18 секунд (9.12.2010 - 22:25) twin написал(а):
Цитата
По мне, так я вообще за исключительное использование только англ. символов в именах файлов.
Ты не один такой. UNIX тоже так думает, на сколько я знаю. Потому и говорю - транслитерация. Туда и обратно.

Спустя 40 минут, 59 секунд (9.12.2010 - 23:06) GydruS написал(а):
twin, ок! Спасибо за ссылку!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.