Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z kodowanie z excela do bazy danych
Forum PHP.pl > Forum > PHP
smiady
Witam.

Zajmuję się importem danych z excela do bazy danych.

Mam taką importującą metodę:
  1. public function importBulk($file) {
  2. if(!file_exists($file))
  3. throw new DiscoveryException('Podana ścieżka do pliku nie istenieje !');
  4.  
  5. $excel= new Spreadsheet_Excel_Reader($file);
  6. $excel->setOutputEncoding('ISO-8859-2');
  7. $sql= 'INSERT INTO bulk(produkt, bulk) VALUES';
  8. $query= array();
  9. for($i= 2; $i<= $excel->rowcount(); ++$i) {
  10. $produkt= $this->code($excel->val($i, 1));
  11. $bulk= $this->code($excel->val($i, 2));
  12. array_push($query, "('$produkt', '$bulk')");
  13. }
  14. $sql.= implode(', ', $query);
  15. if(!mysql_query($sql))
  16. throw new DiscoveryException('Wystąpił błąd przy imporcie danych Bulk !');
  17. }

i po wpisaniu np. Małopolska ucinało na Ma i tak było z każdym polskim znakiem.

Napisałem do tego metodę:
  1. private function code($string) {
  2. $ascii= array('ą' => chr(185), 'Ą' => chr(165), 'ć' => chr(230),
  3. 'Ć' => chr(198), 'ę' => chr(234), 'Ę' => chr(202),
  4. 'ł' => chr(179), 'Ł' => chr(163), 'ń' => chr(241),
  5. 'Ń' => chr(209), 'ó' => chr(243), 'Ó' => chr(211),
  6. 'ś' => chr(156), 'Ś' => chr(140), 'ź' => chr(159),
  7. 'Ź' => chr(143), 'ż' => chr(191), 'Ż' => chr(175));
  8.  
  9. return str_replace($ascii, array_keys($ascii), $string);
  10. }

która rozwiązuje problem z każdym polskim znakiem oprócz ó - tylko ten jeden znak ucina.
Co robić ?
luniak
A jesteś pewien że excel ma kodowanie w ISO a nie w "windows-1250" albo utf?
Michael2318
A próbowałeś funkcjami, typu:

  1. mb_convert_case($string, MB_CASE_TITLE, "UTF-8");


questionmark.gif
smiady
Michael ó się pokazuje, ale nie ma innych polskich znaków ...
Michael2318
Zobacz jeszcze ten temat: http://stackoverflow.com/questions/3666412...blem-with-utf-8
Gość tam pisze, że w pliku: excel_reader2.php w linii 1120 należy zmienić to:

  1. $retstr = ($asciiEncoding) ? $retstr : $this->_encodeUTF16($retstr);


na:

  1. $retstr = ($asciiEncoding) ? iconv('cp1250', 'utf-8', $retstr) : $this->_encodeUTF16($retstr);


Spróbuj czy to w ogóle coś zmieni. Powyższe funkcje (to co napisałem Ci w pierwszym moim poście i to co Ty sam stworzyłeś) możesz usunąć na czas próby.
smiady
Niestety nie dało to nic

Rozwiązałem problem. Pliki zapisuje jako Excel 5.0 i działa.
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.