Hledáme testery pro manuální testování
Zobrazují se odpovědi 1 až 9 z 9

Export csv v kódování Windows-1250

  1. Zdravím všechny a chtěl bych se zeptat, jestli nemáte někdo zkušenosti s csv exportem z MySQL db se znakovou sadou UTF-8? Včera jsem nad tím strávil poměrně dlouhý čas, ale bez kýženého výsledku.

    Pro úplnost tady je skript, kterým export provádím (v základní podobě - tedy bez pokusu o Windows-1250):

    PHP kód:
    <?php
    $filename 
    'rezervace.csv';
    $delimither ';';
    $data $_POST['export_data'];
    $export_data unserialize($data);

    // vytvoreni souboru
    $file fopen($filename,"w");

    foreach (
    $export_data as $line){
      
    fputcsv($file$line$delimither);
    }

    fclose($file); 

    // download
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=$filename");
    header("Content-Type: application/csv; "); 

    readfile($filename);

    // uklid
    unlink($filename);
    exit();

  2. Co se právě děje na Webtrhu?
  3. Kód:
    file_put_contents($filename, iconv('UTF-8', 'WINDOWS-1250', file_get_contents($data)));

  4. Bohužel, vrací se prázdný soubor.

  5. Upload ti funguje? Práva na zápis do adresáře máš?

  6. Mam, jako UTF-8 se stáhne v phodě se všemi daty. Ten soubor tam fyzicky je. Když na něj pustím testovací skript, kde jenom ta konverze, tak je nulový. Ať ho konvertuju jak chci, vždycky se vrátí prázdný.

  7. tohle dej na 2. řádek pod <?php

    PHP kód:
    error_reporting(E_ALL);
    ini_set('display_errors'1); 
    tohle si zkoušel?

    PHP kód:
      fputcsv($fileiconv("UTF-8""WINDOWS-1250"$line), $delimither); 
    nebo

    PHP kód:
      fputcsv($filemb_convert_encoding($line"WINDOWS-1250""UTF-8"), $delimither); 

  8. Pokud ti nefunguje tohle:
    Kód:
    $path = __DIR__.'/';
    $data = 'import.csv';
    $filename = 'export.csv';
    file_put_contents($path.$filename, iconv('UTF-8', 'WINDOWS-1250', file_get_contents($path.$data)));
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=$filename");
    header("Content-Type: application/csv; ");
    readfile($path.$filename);
    unlink($path.$filename);
    tak nemáš povolený zápis do adresáře


    Citace Původně odeslal Tomve Zobrazit příspěvek
    PHP kód:
      fputcsv($filemb_convert_encoding($line"WINDOWS-1250""UTF-8"), $delimither); 
    mbstring nezná kódování WINDOWS-1250

  9. jsem se sekl

  10. Tak už to funguje, a kdyby to třeba někdo potřeboval, tady je finální kód:

    Kód:
    <?php
    error_reporting(E_ALL);
    ini_set('display_errors', 1); 
    
    $filename = 'rezervace.csv';
    $delimither = ';';
    $data = $_POST['export_data'];
    $export_data = unserialize($data);
    
    // vytvoreni souboru
    $file = fopen($filename,"w");
    
    
    function iconv_all($z, $do, &$data) {
        if(is_array($data)) { # pokud je to pole
            foreach($data as $klic => &$hodnota) { # tak ho projdi po prvcich
                iconv_all($z, $do, $hodnota); # pro kazdy se zavolej rekurzivne
            }
        } else if(is_string($data)) { # pokud je to retezec
            $data = iconv($z, $do, $data); # tak ho roznou prekonvertuj
        }
    }
    
    iconv_all('UTF-8', 'CP1250', $export_data);
    
    foreach ($export_data as $line){
        fputcsv($file, $line, $delimither);
    }
    
    fclose($file); 
    
    // download
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=$filename");
    header('Content-Type: text/csv; charset=utf-8'); 
    
    readfile($filename);
    
    // uklid
    unlink($filename);
    exit();
    Všem zúčastněným moc děkuji za váš čas i pomoc a přeju hezký den.

    ---------- Příspěvek doplněn 15.07.2018 v 20:17 ----------

    A tady ještě jedna verze, pracující se souborem místo na disku, v paměti:

    Kód:
    <?php
    $filename = 'rezervace.csv';
    $delimither = ';';
    $data = $_POST['export_data'];
    $export_data = unserialize($data);
     
    // vytvoreni souboru v pameti
    $file = fopen('php://temp', 'r+');
     
    function iconv_all($z, $do, &$data) {
        if(is_array($data)) { # pokud je to pole
            foreach($data as $klic => &$hodnota) { # tak ho projdi po prvcich
                iconv_all($z, $do, $hodnota); # pro kazdy se zavolej rekurzivne
            }
        } else if(is_string($data)) { # pokud je to retezec
            $data = iconv($z, $do, $data); # tak ho roznou prekonvertuj
        }
    }
     
    iconv_all('UTF-8', 'CP1250', $export_data);
     
    foreach ($export_data as $line){
        fputcsv($file, $line, $delimither);
    }
     
    // download
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=$filename");
    header('Content-Type: text/csv; charset=windows-1250');
     
    rewind($file);
    echo stream_get_contents($file);
    fclose($file);

Hostujeme u Server powered by TELE3