PHP: Кодировка при отдаче файла

Discussion in 'PHP' started by Apeckou, 4 Aug 2012.

  1. Apeckou

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

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    Отдаю файл следующим алгоритмом:

    header('Pragma: no-cache');
    header('Cache-Control: publicic, must-revalidate');
    header('Content-Type: "'.$ftype.'"');
    header('Charset=UTF-8');
    header('Content-Disposition: attachment; filename="'.$sendname.'"');
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: '.filesize($loadFile));


    явно указываю кодировку UTF-8, но в браузере ИЕ вместо имени сохраняемого файла - кракозябры.
    Пока что спасаюсь тем что вместо $sendname пишу iconv('UTF-8', 'WINDOWS-1251', $sendname)

    Но мне кажется это неправильное решение, ведь я явно указал кодировку UTF-8, зачем же мне конвертировать в Win-1251???

    ЗЫ. скрипт который СОЗДАЕТ файл и скрипт который ДАЕТ НА ВЫГРУЗКУ файл - оба в UTF8 сохранены.

    что делать плз хелп, объясните мне где я тупанул?
     
  2. Apeckou

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

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    ребят, пожалуйста позагружайте файлы с разными необычными именами и попробуйте скачать - будут ли имена корректно передаваться при скачивании? А то задолбался тестить(
     
  3. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    PHP:
    header('Charset=UTF-8');
    Уверены, что такой заголовок имеет место быть в природе?
     
  4. Sharky

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

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    раз уж на то пошло то

    PHP:
    Accept-Charset:utf-8;
     
  5. Apeckou

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

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    переделал на вот так, все по фен-шую:

    PHP:
    header("Pragma: no-cache");
    header("Accept-Charset:utf-8");
    header("Cache-Control: public, must-revalidate");
    header("Content-Type: $ftype; charset=utf-8");
    header('Content-Disposition: attachment; filename="'.$sendname.'"');
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".filesize($loadFile));
    ИЕ все равно кракозябры вместо имени файла видит
    чтобы не было кракозябр приходится имя файла переделывать iconv('UTF-8', 'WINDOWS-1251', $sendname) но это же неверное решение блин!

    В базе все ок, все хранится в УТФ8, так что я хз в чем дело
     
    #5 Apeckou, 5 Aug 2012
    Last edited: 5 Aug 2012
  6. dex0

    dex0 New Member

    Joined:
    31 Jul 2012
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Формат файла текстовой?
    Прежде чем передать файл сохраните его в формате UTF-8, и только потом передавайте.
     
    #6 dex0, 5 Aug 2012
    Last edited: 5 Aug 2012
  7. Apeckou

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

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    ПРОБЛЕМА В ИМЕНИ ФАЙЛА а не в его содержании!
    у меня файлообменник, я на скачивание разных форматов файлы выдаю
    и ИЕ вместо имени файла при предложении загрузить его показывает кракозябры >.<
     
  8. dex0

    dex0 New Member

    Joined:
    31 Jul 2012
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Firefox, Chrome что показывают?
     
  9. Apeckou

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

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    У них все нормально, нормальное имя показывают
     
  10. dex0

    dex0 New Member

    Joined:
    31 Jul 2012
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Попробуй решить проблему удалив IE. Ничего другого не могу посоветовать, я не пользовался им, не пользуюсь, и не собираюсь.
     
  11. LStr1ke

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

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    $sendname в какой кодировке приходит?
     
  12. Apeckou

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

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    приходит в UTF8 нормально.
    страница в УТФ8 - отображается нормально
    в базе хранится тоже нормально в УТФ8

    как на скачивание выдаю - так ИЕ предлагает под кракозябрами сохранить
     
  13. LStr1ke

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

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    Попробуй для IE отдавать в другой кодировке. Например Windows-1251.
     
  14. Apeckou

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

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    ну я пока что так и делаю. костыль поставил чтоб в вин1251 переделывало. но меня смущает такая фигня, у других ФО такой хрени нет, возможно я где-то накосячил но не пойму где
     
  15. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    917
    Likes Received:
    492
    Reputations:
    724
    Не хотел огорчать, но придется, у меня в ишаке под версией номер 9 вовсе не даёт залить файл.
    [​IMG]
     
    _________________________
    1 person likes this.