Руские имена файлов

Тема в разделе "Perl программирование", создана пользователем Timuridze, 11 сен 2010.

  1. Timuridze

    Timuridze Гость

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

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

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

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

    3) Вот полностью код из upload.cgi ответственный за имя файла
    Код (Text):
    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/</&lt;/gs;
    $fhash{file_descr}=~s/>/&gt;/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 там есть правда код выглядит по другому
    Код (Text):
             $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) На всякий случай страница на форуме где я веду по большей части монолог о русификации. Вот тема про руссификацию а здесь речь идет о пробелах в названиях файлов


    Вообщем кто чем может помочь? Просьба не предлагать забить и найти другой скрипт, я времени убил на это, да и устраивает он меня всем.
    Во вложении мой upload.cgi Посмотреть вложение upload.cgi.zip
     
Загрузка...

Поделиться этой страницей