Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > очередная проблема с кодировкой


Автор: zebulun 8.10.2012, 13:02
всё у меня в utf8, данные получаю постом, кирилица возможна в трех полях : name, lastname и файл пользователя, поля name и lastname проверяются так:
Код

        $pattern='/[^a-zа-яё]/iu';
        if(preg_match($pattern,$name))$errors['nm']='NM_ER_1';

файл пользователя не проверяется так и пишется в базу нормально, а вот при сохранении файла в папку, получается так: "Фото0831.jpg", причем если не ставить модификатор u в паттерне то поле проверку не проходит, все файлы сохранены в utf-8, кодировка определена в 
Код

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

и в .htaccess :
Код

AddDefaultCharset utf-8

причем проблема возникает на денвере, на хостинге всё работает.

Автор: skyboy 8.10.2012, 22:05
Цитата(zebulun @  8.10.2012,  12:02 Найти цитируемый пост)
 а вот при сохранении файла в папку, получается так: "Фото0831.jpg"

что за файловая система, куда ты сохраняешь?
и, кста, чем сохраняешь? move_uploaded_file?

Автор: zebulun 9.10.2012, 09:28
файловая система- windows, сохраняю с помощью ф-и imagejpeg

Автор: skyboy 9.10.2012, 10:01
Цитата(zebulun @  9.10.2012,  08:28 Найти цитируемый пост)
файловая система- windows

NTFS или FAT32? " Windows" — это называется "операционной системой"

Автор: baldina 9.10.2012, 10:06
Цитата(zebulun @  9.10.2012,  09:28 Найти цитируемый пост)
файловая система- windows

что-то новое))))

Автор: zebulun 10.10.2012, 00:36
NTFS,
вы, типа такие умные сейчас определите из-за чего проблема, по файловой системе, да? если не знаете чем помочь в данном вопросе нечего отвечать вообще.

Автор: ksnk 10.10.2012, 07:23
Ну, дык, надо с большой осторожностью пользоваться русским названиями файлов.

Название приходит в utf-8, а для корректной работы, файловые операции в windows желают получать название файла в кодировке cp1251. 

Узнать, что находишься на сервере с windows можно, посмотрев на $_ENV["OS"] Получится что-то вроде `Windows_NT`

А на хостинге точно все нормально с загруженными файлами с русскими названиями? И по ftp они нормально качаются туда-обратно? И ссылки на них с русскими буквами нормально в страницы вставляются?


Автор: skyboy 10.10.2012, 09:30
Цитата(ksnk @  10.10.2012,  06:23 Найти цитируемый пост)
А на хостинге точно все нормально с загруженными файлами с русскими названиями?

скорее всего. меня связка Linux → ext2 → unicode file names не подводила.
Цитата(zebulun @  9.10.2012,  23:36 Найти цитируемый пост)
сейчас определите из-за чего проблема, по файловой системе, да?

думаешь, нечем нам заняться, сообщения строчим?
Цитата(zebulun @  8.10.2012,  12:02 Найти цитируемый пост)
"Фото0831.jpg

это utf-8, который трактуется как cp1251.
можешь попробовать с помощью iconv явно преобразовывать utf-8 → cp1251
но мне не нравится эта идея.

Автор: zebulun 10.10.2012, 09:57
Да на хостинге все норм, и по ftp - качаются, вот посмотрите
http://webmaster.webtm.ru/test/reg/?profile=118
вывел $_ENV
в принципе я вообще решил отказаться от оригинальных названий загружаемых файлов, но возник еще один вопрос:
я обрабатываю имена файлов так:
Код

$new_name=time().'_'.substr(md5($real_name),0,5);

допустимо ли хранить и использовать файлы без расширения?

Автор: baldina 10.10.2012, 10:12
Цитата(zebulun @  10.10.2012,  09:57 Найти цитируемый пост)
допустимо ли хранить и использовать файлы без расширения?

конечно. расширение это возможность и соглашение, оно необязательно

Автор: ksnk 10.10.2012, 10:24
Цитата(zebulun @  10.10.2012,  09:57 Найти цитируемый пост)
вывел $_ENV

Нету - значит не надо. На Windows машинах, начиная с win2000 (или даже с Win NT ;) )она ставится сама.
Цитата(zebulun @  10.10.2012,  09:57 Найти цитируемый пост)
допустимо ли хранить и использовать файлы без расширения?

Допустимо. Если при этом описание файла храниться в отдельной базе, и есть гарантия, что доступ к файлам будет только через сайт.

Я в таком случае делал транслитерацию имени файла. Как-то оно проще было ковыряться в каталоге и видеть понятное, в принципе, название, а не маловразумительный хеш.

Автор: zebulun 10.10.2012, 10:39
Цитата(ksnk @  10.10.2012,  10:24 Найти цитируемый пост)
Я в таком случае делал транслитерацию имени файла. Как-то оно проще было ковыряться в каталоге и видеть понятное, в принципе, название, а не маловразумительный хеш.

а зачем мне там ковырятся? имена в базе, что еще надо?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)