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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Выдать файл с кодировкой windows-1251

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Edwvee
Отправлено: 21 Января, 2014 - 14:59:33
Post Id


Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июнь 2013  


Помог: 1 раз(а)




На сервере, в защищенной от доступа по ссылке папке лежит csv файл в кодировке windows-1251. Абсолютно нормальный сам по себе. Как выдать его через скрипт так, чтобы не испортить кодировку? Что и собственно у меня сейчас и происходит, русский вообще в иероглифы превращается.
 
 Top
peters
Отправлено: 21 Января, 2014 - 15:03:00
Post Id


Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Янв. 2014  


Помог: 7 раз(а)




iconv
 
 Top
Мелкий Супермодератор
Отправлено: 21 Января, 2014 - 15:04:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Отдать как бинарник. Например, http://forum.php.su/topic.php?fo...=35&topic=11


-----
PostgreSQL DBA
 
 Top
eai
Отправлено: 21 Января, 2014 - 15:04:29
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Edwvee пишет:
На сервере, в защищенной от доступа по ссылке папке лежит csv файл в кодировке windows-1251. Абсолютно нормальный сам по себе. Как выдать его через скрипт так, чтобы не испортить кодировку? Что и собственно у меня сейчас и происходит, русский вообще в иероглифы превращается.


Вывод в какой кодировке ?
 
 Top
Edwvee
Отправлено: 21 Января, 2014 - 15:26:41
Post Id


Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июнь 2013  


Помог: 1 раз(а)




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

Никакой разницы.

(Отредактировано автором: 21 Января, 2014 - 15:36:29)

 
 Top
eai
Отправлено: 21 Января, 2014 - 15:37:49
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




вложите файл в формате tar.gz
 
 Top
Edwvee
Отправлено: 21 Января, 2014 - 15:39:33
Post Id


Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июнь 2013  


Помог: 1 раз(а)




Это не будет хорошо с точки зрения юзабильности.
Попробовал = вместо : при charset, получил то же самое.
 
 Top
eai
Отправлено: 21 Января, 2014 - 15:40:27
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Edwvee пишет:
Это не будет хорошо с точки зрения юзабильности.
Попробовал = вместо : при charset, получил то же самое.


Яж грю сюда выложите, посмотрим
 
 Top
Edwvee
Отправлено: 21 Января, 2014 - 15:48:13
Post Id


Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июнь 2013  


Помог: 1 раз(а)




Не понял какой из двух файлов нужно, вложил оба.
В 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(). Но дела это не меняло.

(Отредактировано автором: 22 Января, 2014 - 09:39:13)

 
 Top
eai
Отправлено: 21 Января, 2014 - 16:06:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




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;

Вот так у меня нормально работает
 
 Top
Edwvee
Отправлено: 22 Января, 2014 - 08:14:38
Post Id


Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июнь 2013  


Помог: 1 раз(а)




Не, у меня то же самое получается.
(Добавление)
Заголовки в итоге такие получаются
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 одного из подключаемых файлов.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Кодировки и все смежное »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB