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
Форумы портала PHP.SU :: Версия для печати :: Выдать файл с кодировкой windows-1251
Форумы портала PHP.SU » » Кодировки и все смежное » Выдать файл с кодировкой windows-1251

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

1. Edwvee - 21 Января, 2014 - 14:59:33 - перейти к сообщению
На сервере, в защищенной от доступа по ссылке папке лежит csv файл в кодировке windows-1251. Абсолютно нормальный сам по себе. Как выдать его через скрипт так, чтобы не испортить кодировку? Что и собственно у меня сейчас и происходит, русский вообще в иероглифы превращается.
2. peters - 21 Января, 2014 - 15:03:00 - перейти к сообщению
iconv
3. Мелкий - 21 Января, 2014 - 15:04:17 - перейти к сообщению
Отдать как бинарник. Например, http://forum.php.su/topic.php?fo...=35&topic=11
4. eai - 21 Января, 2014 - 15:04:29 - перейти к сообщению
Edwvee пишет:
На сервере, в защищенной от доступа по ссылке папке лежит csv файл в кодировке windows-1251. Абсолютно нормальный сам по себе. Как выдать его через скрипт так, чтобы не испортить кодировку? Что и собственно у меня сейчас и происходит, русский вообще в иероглифы превращается.


Вывод в какой кодировке ?
5. Edwvee - 21 Января, 2014 - 15:26:41 - перейти к сообщению
iconv из виндовс 1251 в утф дает читаемый файл. Но проблема в том, что мне нужен этот файл именно в виндовс 1251. Эксель свои файлы в таком формате держит. Хотя в нем в файле, который я выдаю, без iconv(виндовс1251, утф8) получается битая кодировка. Но и сам файл видимо почему-то в кодировке утф8.
Пробовал следующее писать:
PHP:
скопировать код в буфер обмена
  1. header("Content-Type: application/file; Charset: WINDOWS-1251");

Никакой разницы.
6. eai - 21 Января, 2014 - 15:37:49 - перейти к сообщению
вложите файл в формате tar.gz
7. Edwvee - 21 Января, 2014 - 15:39:33 - перейти к сообщению
Это не будет хорошо с точки зрения юзабильности.
Попробовал = вместо : при charset, получил то же самое.
8. eai - 21 Января, 2014 - 15:40:27 - перейти к сообщению
Edwvee пишет:
Это не будет хорошо с точки зрения юзабильности.
Попробовал = вместо : при charset, получил то же самое.


Яж грю сюда выложите, посмотрим
9. Edwvee - 21 Января, 2014 - 15:48:13 - перейти к сообщению
Не понял какой из двух файлов нужно, вложил оба.
В targz нечем заархивировать, 7z я думаю не проблема открыть, учитывая бесплатность.
Код у меня такой:
PHP:
скопировать код в буфер обмена
  1. header("Content-Type: application/file; charset=WINDOWS-1251");
  2.                 header("Content-Disposition: filename=\"". Utils::getFilenameFromFullPath($this->output) . "\"");
  3.                
  4.                 $a =  file_get_contents($this->output);
  5.                 die($a);

(Добавление)
О, в получаемом в конце еще макет страницы залился, я еще не вспомнил, что нужно die(). Но дела это не меняло.
10. eai - 21 Января, 2014 - 16:06:04 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.                         header("Content-Disposition:attachment;filename=1.csv;charset=win-1251");
  2.                         header('Cache-Control: max-age=0');
  3.                         // If you're serving to IE 9, then the following may be needed
  4.                         header('Cache-Control: max-age=1');
  5.                                 // If you're serving to IE over SSL, then the following may be needed
  6.                         header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  7.                         header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
  8.                         header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  9.                         header ('Pragma: public'); // HTTP/1.0
  10.                        
  11.                         print file_get_contents("1.csv");
  12.                         exit;

Вот так у меня нормально работает
11. Edwvee - 22 Января, 2014 - 08:14:38 - перейти к сообщению
Не, у меня то же самое получается.
(Добавление)
Заголовки в итоге такие получаются
CODE (htmlphp):
скопировать код в буфер обмена
  1. Cache-Control   cache, must-revalidate
  2. Connection      Keep-Alive
  3. Content-Disposition     attachment;filename="1.csv";charset=win-1251
  4. Content-Type    text/html
  5. Date    Wed, 22 Jan 2014 06:19:50 GMT
  6. Expires Mon, 26 Jul 1997 05:00:00 GMT
  7. Keep-Alive      timeout=5, max=100
  8. Last-Modified   Wed, 22 Jan 2014 06:19:50 GMT
  9. Pragma  public
  10. Server  Apache/2.2.22 (Win32) PHP/5.3.24
  11. Set-Cookie      SESSION=f942oj1fulonnrqd844g4ccuk5; path=/
  12. Transfer-Encoding       chunked
  13. X-Powered-By    PHP/5.3.24

(Добавление)
В итоге так заработало:
PHP:
скопировать код в буфер обмена
  1.                 header('Content-Type: application/vnd.ms-excel; charset=windows-1251;');
  2.                 header("Content-Disposition:attachment;filename=\"$filename\";charset=windows-1251;");
  3.                 header('Cache-Control: max-age=0');
  4.         // If you're serving to IE 9, then the following may be needed
  5.                 header('Cache-Control: max-age=1');
  6.         // If you're serving to IE over SSL, then the following may be needed
  7.                 header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  8.                 header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
  9.         header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  10.                 header ('Pragma: public'); // HTTP/1.0
  11.                 $content = file_get_contents($this->output);
  12.                 print $content;
  13.                 exit;

(Добавление)
Проблема оказалась в BOM одного из подключаемых файлов.

 

Powered by ExBB FM 1.0 RC1