Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHPExcel] Export probelem z kodowaniem
Forum PHP.pl > Forum > PHP
maniek74
Witam
Mam problem z polskimi ogonkami przy exporcie z bazy do Excel. Plik mam kodowany na UTF-8 bez bom, baza kodowana utf8_unicode_ci.

  1. <?php
  2. require_once '../../../../class/PHPExcel.php';
  3.  
  4. $objPHPExcel = new PHPExcel;
  5. $objPHPExcel->getDefaultStyle()->getFont()->setName('Calibri');
  6. $objPHPExcel->getDefaultStyle()->getFont()->setSize(8);
  7. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
  8. $objSheet = $objPHPExcel->getActiveSheet();
  9. $objSheet->setTitle('Raport');
  10. $objSheet->getStyle('A1:D1')->getFont()->setBold(true)->setSize(12);
  11.  
  12. $connection = @mysql_connect('localhost', 'root', 'thomson1974ABCD') or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  13. $db = @mysql_select_db('gc', $connection) or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  14. $db = mysql_query("SELECT * FROM `portal_collect` WHERE `collect_status`='1'");
  15. mysql_query('SET NAMES latin2');
  16. $ID = 2;
  17. while($row = mysql_fetch_array($db)){
  18. $name = mb_convert_encoding($row['collect_name'],'utf-8','ISO-8859-2');
  19. $objSheet->getCell('A'.$ID)->setValue($name);
  20. $ID++;
  21. }
  22.  
  23. $objSheet->getColumnDimension('A')->setAutoSize(true);
  24. $objSheet->getColumnDimension('B')->setAutoSize(true);
  25. $objSheet->getColumnDimension('C')->setAutoSize(true);
  26. $objSheet->getColumnDimension('D')->setAutoSize(true);
  27.  
  28. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  29. header('Content-Disposition: attachment;filename=plik.xlsx');
  30. header('Cache-Control: max-age=0');
  31. $objWriter->save('php://output');
  32.  
  33. mysql_close($connection);
  34. ?>


Plik się generuje ale bez polskich znaków.
Pozdrawiam

andrew654
Skoro baza jest kodowana w utf, to czemu ustawiasz połączenie z bazą na latin2? Linia 15: mysql_query('SET NAMES latin2'); Wydaje mi się, że ustawienie kodowania połaczenia z bazą powinno być zaraz po połączeniu z bazą, zanim pobierze się dane selectem, chyba że to celowe.

maniek74
Nie to nic nie dawało, rozwiązała problem dopiero podmiana znaków przy zapisie do bazy, a potem przy generowaniu xls z powrotem.
bobek358
Jak dla mnie zamiast:

  1. mysql_query('SET NAMES latin2');


na

  1. mysql_query('SET NAMES utf8');


skoro w bazie dane masz w utf8.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.