svisch
@svisch

Почему проблемы с кодировкой при переносе на другой сервер?

Добрый вечер. Столкнулся со следующей проблемой.
Есть два сервера. В двух используемых библиотеках для вывода данных в PDF и Excel наблюдаются проблемы на одном из них при одинаковой кодовой базе. На проблемном сервере выводятся в вышеупомянутые форматы файлов знаки вопроса и каракули - по всем признакам проблемы с кодировкой.
Полагаю дело в БД (Postgres). На проблемном сервере параметры бд Collation и Character-type - en_US.UTF-8, а на том где все в порядке - ru_RU.UTF-8.
Может кто сталкивался? Если да, то как можно решить данную проблему?
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
svisch
@svisch Автор вопроса
Нашел решение в виде ob_end_clean(); перед установкой заголовков.
До конца еще не разобрался, но до этого с выводом происходили странные вещи. Дебажил код и база оказалась вообще не при чем. Вручную прописывал ячейки таблицы и одно слово на русском отрабатывало удачно, в то время как другое в этой же ячейке не отображалось. Связи не выявил.
Если кто объяснит почему ob_end_clean() помогло, буду благодарен. Ниже привожу рабочий код. Лишнее поубирал.
require_once __DIR__ . '/../phpexcel/Classes/PHPExcel.php';
require_once(__DIR__ . '/../phpexcel/Classes/PHPExcel/Writer/Excel5.php');

$xls = new \PHPExcel();
$xls->setActiveSheetIndex(0);

$sheet = $xls->getActiveSheet();

$sheet->setCellValue("A1", 'Тест1');
$sheet->setCellValue("B1", 'Тест2');
$sheet->setCellValue("C1", 'Тест3');
$sheet->setCellValue("D1", 'Тест4');
$sheet->setCellValue("E1", 'Тест5');
$sheet->setCellValue("F1", 'Тест6');
$sheet->setCellValue("G1", 'Тест7');
$sheet->setCellValue("H1", 'Тест8');

ob_end_clean();
header ( "Expires: Mon, 1 Apr 1974 05:00:00 GMT" );
header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" );
header ( "Cache-Control: no-cache, must-revalidate" );
header ( "Pragma: no-cache" );
header ( "Content-type: application/vnd.ms-excel" );
header ( "Content-Disposition: attachment; filename=test.xls" );
       
 $objWriter = new \PHPExcel_Writer_Excel5($xls);
 $objWriter->save('php://output');


До появления в коде ob_end_clean() генерируемый excel файл то был пустым, то с текстом в ячейках, но при указании кодировки mb internal encoding("UTF-8") в начале кода.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы