Autor Zpráva
Cakewalk
Profil
Na téma exportu dat do CSV s podporou diakritiky je spousta rad, z nichž některé lze využít a některé ne. Největší problém je otevření souboru v Excelu. Ten si s diakritikou vůbec neporadí. Osobně se mi osvědčilo použití BOM:

$titleString = implode($delimiter, $titleArray);
print chr(0xEF) . chr(0xBB) . chr(0xBF).$titleString . "\r\n";

Bohužel mi použití BOM neprovede implode. Neví někdo, jak to vyřešit? Díky
peta
Profil
???
Jak BOM souvisi s implode? Navic, php ma na konverzi do csv vlastni funkce, ale implode se da pouzit.
Pokud jsou data v utf-8, tak je nutne pridat BOM na zacatek souboru, jinak ma excel s diakritikou problem. To je fakt a funguje mi to.
Myslim si, ze ta cast kodu, co jsi sem dal, by mohla fungovat bez potizi. Mozna by bylo dobre videt vystup souboru a link na php zdrojak. Treba v nema mas neco navic, radek pred BOm a tak.
Cakewalk
Profil
Jde o to, že po přidání BOM se zruší rozdělení do sloupců.

Podstatná část scriptu:

$data = array();
            
            while ($invoice_details = $db->fetch_array($sql_select_invoices))
                {
                            
                    $history_row = $item->history_row($invoice_details, 1);
                    
                    $data [] = array ( AMSG_USER_DETAILS => '[ ' . MSG_ID . ': ' . $invoice_details['user_id'] . ' ] ' . $invoice_details['username'],
                                MSG_ITEM_ID => $invoice_details['item_id'], 
                                MSG_INVOICE_NAME => $history_row['invoice_name'], 
                                GMSG_DATE => $history_row['date'], 
                                GMSG_AMOUNT => $history_row['amount']);
                    }
                    
                    $titleArray = array_keys($data[0]);
                    
                    $delimiter = "\t";
                    $filename="Search_Export.xls";

                    header("Content-Encoding: UTF-8");
                    header("Content-type: text/csv; charset=UTF-8");
                    
                    header("Content-Disposition: attachment; filename=$filename");
                    header ("Content-Type: application/vnd.ms-excel") ;
                    header("Pragma: no-cache");
                    
                    header("Expires: 0");
                    
                    
                    
                    
                    $titleString = implode($delimiter, $titleArray);
                    print chr(0xEF) . chr(0xBB) . chr(0xBF).$titleString . "\r\n";
                    
                    foreach ($data as $subArrayKey => $subArray) {
                        $dataRowString = implode($delimiter, $subArray);
                        print $dataRowString . "\r\n";
                    }
                    exit;

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0