LINUX.ORG.RU

Руские имена файлов и автозамена пробела в «_»


0

0

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

http://files.kazani.net/OK742FNOXU44/файл с длинным названием на русском с про белами.txt.html
при нажатии на неё открывается окно браузера где пробелы автоматом заменяются на (%20)...всё скачивается, все довольны. НО, кроме прямой ссылки есть там еще ссылка для форумов вида
[URL=http://files.kazani.net/OK742FNOXU44/файл с длинным названием на русском  с про белами.txt.html]файл с длинным названием на русском  с про белами.txt - 1.4 Kb[/URL]
Вот эта ссылка на форумах никак показываться не хочет она просто обрезается до первого пробела. Вот есть у этих ребят еще и платная версия скрипта в которой файл с длинным названием на русском с про белами где вместо пробелов подставляется _ (знак подчеркивания).

А теперь что мне удалось выяснить.

1) В оригинальной версии скрипт, в которой все русские буквы заменяли на _, в скрипте upload.cgi , была такая строка

 #$fhash{file_name_orig}=~s/[^a-zA-Z0-9-_\.]/_/gs;
после того как я её закоментил(разрабы подсказали) скрипт стал грузить русские файлы нормально, но с пробелами.

2) Не мудрствуя лукаво я сделал так

 $fhash{file_name_orig}=~s/[^a-zA-Zа-яА-Я0-9-_\.]/_/gs; 
скрипт стал грузить в непонятной полуруской полу киргудушной кодировке но с подчеркиваниями вот как на фото

http://s001.radikal.ru/i195/1009/37/4c62e622572c.png

3) Вот полностью код из upload.cgi ответственный за имя файла

my %fhash;
   $fhash{field_name}=$k;
   $fhash{file_name_orig} = $filename;
   $fhash{file_size}  = -s $u;
   $fhash{file_descr} = $cg->param("$k\_descr");
   $fhash{file_mime}  = $cg->uploadInfo($u)->{'Content-Type'};
   my $rand = &randchar(12);
   while($db->SelectOne("SELECT file_id FROM Files WHERE    file_code=?",$rand)){$rand = &randchar(12);}
   $fhash{file_name}  = $rand;
   $fhash{del_id} = &randchar(10);

   #$fhash{file_name_orig}=~s/[^a-zA-Z0-9-_\.]/_/gs;
 #$fhash{file_name_orig}=~s/[^a-zA-Zа-яА-Я0-9-_\.]/_/gs;
   $fhash{file_descr}=~s/</</gs;
   $fhash{file_descr}=~s/>/>/gs;
   $fhash{file_descr}=~s/"/&quote;/gs;
   $fhash{file_descr}=~s/\(/(/gs;
   $fhash{file_descr}=~s/\)/)/gs;
   $fhash{file_descr}=~s/\#/#/gs;
   $fhash{file_descr}=~s/\&/&/gs;

4) В интернете я нашел нуленную платную версию их скрипта...Она сильно отличается от бесплатной но upload.cgi там есть правда код выглядит по другому

         $u->{file_size}=-s $u->{file_tmp};
         $u->{file_name_orig}||=$fname2;
         $u->{file_name_orig}=~s/.+\/(.+)$/$1/;
         $u->{file_name_orig}=~s/\.html?$//i;
         $u->{file_name_orig}=~s/\?.*$//;
         $u->{file_name_orig}=~s/\?+//g;
         $u->{file_name_orig}||=join('', map int rand(10), 1..5);
         if($u->{rslee} && $resp->content_type eq 'text/html')

5) На всякий случай страница на форуме где я веду по большей части монолог о русификации.Вот тема про руссификацию

а здесь речь идет о пробелах в названиях файлов

Вообщем кто чем может помочь?

Ответ на: комментарий от Chumka

Спасибо действительно то что надо....Не думал уже что кто нибудь поможет.

Timuridze
() автор топика
Ответ на: комментарий от Alan_Steel

Об этом не думал...но вариант с подчеркиваниями больше нравится....Обычная ссылка ведь когда генериться с пробелами, в браузере она начинает выглядить некрасиво и длинно, так как добавляеться %20 вместо пробелов то есть 3 символа вместо _ одного.

Timuridze
() автор топика
Ответ на: комментарий от Timuridze

Можно попытаться намекнуть разработчикам браузера (через их багзиллу), что то, что передатся серверу и то, что браузер показывает пользователю в адресной строке - две большие разницы, и отображение можно (и нужно) поправить.

Alan_Steel ★★
()
Ответ на: комментарий от Timuridze

>браузере она начинает выглядить некрасиво и длинно

не используй некошерные браузеры и все будет красиво и лаконично.

maloi ★★★★★
()

Скрипт транслитерации

Я решал подобную задачу. Пишу на perl и использую эту процедуру:

http://www.zhlobs.ru/russkie_bukvy.html

А для преобразования пробелов в нижнее подчёркивание - регулярное выражение:

$url=~s/ /_/ge;

PeterPain
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.