вопрос по кодировке при передаче файла

Discussion in 'PHP' started by MstDoc, 4 Apr 2007.

  1. MstDoc

    MstDoc Elder - Старейшина

    Joined:
    6 Jan 2007
    Messages:
    58
    Likes Received:
    15
    Reputations:
    19
    Для передачи файла с сервака я использовал вот такие заголовки:

    PHP:
    header("Content-Type: " $mm_type);
    header("Content-Length: " .(string)(filesize($url)) );
    header('Content-Disposition: attachment; filename="'.$name.'"');
    header("Content-Transfer-Encoding: binary");
    Переменная $name берется из базы данных. Когда в ней есть только цифры и латинские буквы все работает норм. Когда есть русские буквы, файл скачивается, но при этом в качестве имени идет беспорядочный набор символов или только та часть имени, которая написана латинскими буквами.

    При этом русский текст на страницу из базы передается нормально. Т.е. на странице отображается правильно.

    Сайт расположен на 5gbfree.com. Когда проверяю у себя на компе в денвере, то все норм пашет.

    Подскажите пожалуйста, как это исправить, или где почитать на тему.
     
    #1 MstDoc, 4 Apr 2007
    Last edited by a moderator: 4 Apr 2007
  2. je0n

    je0n Elder - Старейшина

    Joined:
    14 May 2006
    Messages:
    345
    Likes Received:
    96
    Reputations:
    41
    может я сейчас тупану... Но попробуй так
    header("Content-Type: application/octet-stream; charset=UTF-8;");

    ну и если не поможет попробуй поменять значения UTF-8 на другие кодировки.


    ну а еще можешь попреобразовывать кодировку в переменной $name. Функция convert_cyr_string()
     
    #2 je0n, 4 Apr 2007
    Last edited: 4 Apr 2007
  3. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    http://forums.webscript.ru/showthread.php?postid=148642
    http://www.flasher.ru/forum/showthread.php?t=72253
    Вот что выдал мне гугл. Я бы просто сделал перекодировку в английиские буквы.
     
  4. MstDoc

    MstDoc Elder - Старейшина

    Joined:
    6 Jan 2007
    Messages:
    58
    Likes Received:
    15
    Reputations:
    19
    Пока ничего не помогло.

    Прикол в том, что когда переменную $name выводится просто как текст на страницу, то все норм- русские буквы отображаются правильно. А когда сервер передает клиенту файл, где в качестве имени стоит эта же переменная, то тут уже проблемы с русскими буквами...

    Перекодировка, конечно вариант, но все-таки хотелось бы нормальные русские имена...
     
  5. bxN5

    bxN5 Elder - Старейшина

    Joined:
    8 Jan 2006
    Messages:
    687
    Likes Received:
    138
    Reputations:
    32
    PHP:
    header("Content-Disposition: attachment; filename="'.$name.'"); 
    Не?Зач строкой передавать?
    з/ы минусы не ставить я не гуру
    pp/s новый цвет режит глаза
     
    1 person likes this.
  6. MstDoc

    MstDoc Elder - Старейшина

    Joined:
    6 Jan 2007
    Messages:
    58
    Likes Received:
    15
    Reputations:
    19
    Вот что примечательно:
    если просто кинуть на сервак файл с русскими буквами в названии и дать на него прямую ссылку, то все отображается и скачивается норм....
     
  7. MstDoc

    MstDoc Elder - Старейшина

    Joined:
    6 Jan 2007
    Messages:
    58
    Likes Received:
    15
    Reputations:
    19
    Неужели никто не сталкивался? В инете ни одного решения нету...
     
  8. _Nikolas_

    _Nikolas_ New Member

    Joined:
    27 Dec 2006
    Messages:
    17
    Likes Received:
    3
    Reputations:
    0
    просто может на серваке кодировка по умолчанию другая, перекодируй имя файла в нее и все должно работать.
     
  9. MstDoc

    MstDoc Elder - Старейшина

    Joined:
    6 Jan 2007
    Messages:
    58
    Likes Received:
    15
    Reputations:
    19
    пробовал вот так, все равно не помогло...

    PHP:
    function toUnicodeEntities($text$from="w") {
             
    $text convert_cyr_string($text$from"i");
             
    $uni "";
    for (
    $i=0$len=strlen($text); $i<$len$i++) {
         
    $char $text{$i};
         
    $code ord($char);
         
    $uni .= ($code>175)? "&#" . (1040+($code-176)) . ";" $char;
    }
    return 
    $uni;
    }
     
  10. _Nikolas_

    _Nikolas_ New Member

    Joined:
    27 Dec 2006
    Messages:
    17
    Likes Received:
    3
    Reputations:
    0
    Нет, ну не так конечно. Какая у тебя кодировка в пхп файлах и какая на серваке по умолчанию?
     
  11. MstDoc

    MstDoc Elder - Старейшина

    Joined:
    6 Jan 2007
    Messages:
    58
    Likes Received:
    15
    Reputations:
    19
    на серваке по умолчанию стоит utf-8, на странице я выставил cp1251, в базе тоже 1251,
    в header пробовал добавлять 1251 не помогло...