Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: проблемма с кодировкой имен файлов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
zverko
Отправлено: 30 Марта, 2011 - 20:27:56
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2011  


Помог: 1 раз(а)




Доброго времени суток.
Проблема заключается в чтении имен файлов с рус символами.
Знакомый попросил написать ему инет магазинчик, я оформил это как модуль joomы
у которой кодировка страниц и бд в utf-8.
Каждый товар имеет свой код, в папке images/foto лежат фотки товара под названием
код+.jpg задача вроде бы не хитрая берем код из базы прибавляем расширение и проверяем на наличие файла, если тру то говорим что фото товара есть.
Но подвох в том что некоторые коды товара имеют русские символы и в место них в пути образуются "закорючки". (коды берутся из 1с муси и от меня не как не зависят)
Перепробовав все что только можно я решил сделать костыль, динамически заменять рус символы в коде товара на латинские вообщем транслит

PHP:
скопировать код в буфер обмена
  1. function encodestring($st)  {
  2.     $st=strtr($st, array(
  3.                                         "а"=>"a","А"=>"A",
  4.                                         "б"=>"b","Б"=>"B",
  5.                                         "в"=>"v","В"=>"V",
  6. ...
  7.  


теперь же встала задача переименовать файлы в каталоге, там где то 2500 изображений

пробовал вот такой код
PHP:
скопировать код в буфер обмена
  1.  
  2. $file_list = glob("../images/foto/*.jpg"); //читаем файлы в массив
  3. $count = count($file_list); //размер масссива
  4. for ($i=0;$i<$count;$i++){  
  5. $files=$file_list[$i];
  6. $filen=$files;
  7. $filen= encodestring($filen); // функция транслита
  8. rename($files, $filen);
  9. }


тут я опять встретился с этой проблемой
11011-��.jpg вместо 11011-мб.jpg Не понял
на сколько я понимаю имена в win-1251 и надо $filen перегнать в utf-8
перепробовал iconv(), mb_convert_encoding() и convert_cyr_string() ничего не помогло.



Вообщем какие у кого идеи) Заранее благодарен.
 
 Top
SAD
Отправлено: 30 Марта, 2011 - 22:01:46
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




из utf8 в 1251
 
 Top
Телевизор
Отправлено: 30 Марта, 2011 - 22:42:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 369
Дата рег-ции: Март 2010  
Откуда: с яндекса


Помог: 3 раз(а)




да да у меня похожая проблема была, со скачиванием файлов с сервера, все было у меня в utf-8 но названия файлов были windows1251 и тоже выдавали КВАДРАТНЫЙ НОЛИКИ.

решил так:

и так
zubrag .com/scripts/download.php
там малюсенький скриптик - скачивалка файлов с сервера он и отлично качает кириллицу, думаю алгоритм выдержишь....
 
 Top
JustUserR
Отправлено: 31 Марта, 2011 - 20:53:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




zverko пишет:
На сколько я понимаю имена в win-1251 и надо $filen перегнать в utf-8
Для осуществления решения предполагаемой задачи, заключающеся в проведении получения корректного значеня сопоставленного строкового информационного поля в ассоцированном повышенном базовом уровне элементного трактования, необходимо обеспечение анализа соответственных параметров хранения составляющего объекта данных, в отношении декларированного значения кодовой таблицы и локальных базовых разграничивающих и управляющих элементов; после осуществления указанного процесса нормализации целевых инстанций информационных полей в сопоставленном базовом уровне трактования, возможно обеспечение модификации ассоциированной кодовой таблицы на основании использование штатных средтсв PHP-интерпретатора для целевых конечных информационных полей


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
zverko
Отправлено: 01 Апреля, 2011 - 10:00:31
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2011  


Помог: 1 раз(а)




JustUserR ты конечно загнул, но общую суть мне кажется я понял и это хороший выход))
 
 Top
JustUserR
Отправлено: 02 Апреля, 2011 - 20:44:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




zverko пишет:
JustUserR ты конечно загнул, но общую суть мне кажется я понял и это хороший выход))
В действительности использование предполагаемого варианта для осуществления решения оригинальной задачи, позволяет производить унификацию поддержания процесса транспортировки информационных полей в первичном и вторичном внешнем базовом элементом уровне трактования, поскольку обеспечивает проведение анализа соответственных параметров хранения составляющего объекта данных, в отношении декларированного значения кодовой таблицы и локальных базовых разграничивающих и управляющих элементов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
zverko
Отправлено: 03 Апреля, 2011 - 16:49:02
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Март 2011  


Помог: 1 раз(а)




В общем сделал так,берем название файла в utf-8 и перегоняем в windows-1251

PHP:
скопировать код в буфер обмена
  1. function encodestring($st)  {
  2.     $st=strtr($st, array(
  3.                                         "а"=>chr(224),"А"=>chr(192),
  4.                                         "б"=>chr(225),"Б"=>chr(193),
  5. ...


дальше добавляем расширение и путь

функция @fopen($url, "r") теперь находит его на ура, а вот показывать картинку с таким имение не хочет при переходе на картинку пишет
CODE (htmlphp):
скопировать код в буфер обмена
  1. The requested URL /images/foto/пїЅпїЅ-8.jpg was not found on this server.

/images/foto/��-8.jpg вместо /images/foto/ТС-8.jpg

я чет вообще в кодировках запутался Не понял
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB