Ulozeni CSV souboru ze sablony jako win1250
- elden46
- Člen | 37
Zdravim vsechny,
vytvarim si CSV soubor, ktery bude pouzit jako import dat do jineho systemu.
Cilovy system vyzaduje kodovani win-1250, cehoz nejsem schopen dosahnout.
<?php
$template= new FileTemplate();
$template->registerFilter(new Latte\Engine());
$template->setFile(__DIR__.'/../AdminModule/templates/Orders/Export.latte');
$fileName = 'Export-'.date('Y-m-d').'.csv';
$content = $template->render();
$httpResponse = new \Nette\Http\Response;
$httpResponse->setContentType('application/csv','windows-1250');
$httpResponse->setHeader('Content-Disposition', 'attachment; filename="' . $fileName . '"');
$httpResponse->setHeader('Content-Length', strlen($content));
$httpResponse->setHeader('Content-Description', 'File Transfer');
$httpResponse->setHeader('Content-Transfer-Encoding', 'binary');
$this->presenter->sendResponse(new TextResponse(iconv('UTF-8','WINDOWS-1250//TRANSLIT//IGNORE',$content),$fileName));
?>
Zkousel jsem ruzne nastaveni iconv() a bez vysledku. Mam pocit, ze jedine, kdy se mi darilo konvertit utf8->win1250 bylo v pripade, ze jsem iconv() pouzil v sablone a u toho jsem jeste dostaval jine vysledky na testovacim a produkcnim serveru (na produkcnim mi iconv() nad vyrazy s diakritikou vracela null).
Poradite, prosim?
- llsm
- Člen | 121
Také jsem skončil u toho, ze csv tvořím v presenteru.
Tady přikladám mojí fci, je uz trochu historická, ale stále funguje. Trochu jsem ji osekal, v realite mi tvori jen docasny soubor, ktery nekam pak nahraje a v tempu to smaze.
<?php
public function createCSVFile(array $rows, $filename, array $headers = NULL) {
$fh = fopen($this->context->params['wwwDir'] . '/../files/temp/' . $filename, 'w');
// csv
if($headers) {
$rowResult = array();
foreach($headers as $header) {
$rowResult[] = iconv('UTF-8', 'cp1250', $header);
}
fputcsv($fh, $rowResult, ';');
}
foreach ($rows as $row) {
$rowResult = array();
foreach($row as $value) {
$rowResult[] = iconv('UTF-8', 'cp1250', $value);
}
fputcsv($fh, $rowResult, ';');
}
fclose($fh);
return $filename;
}
?>
- Felix
- Nette Core | 1271
Uz to nekdo udelal za vas ;-)
https://componette.org/search/?…
Kdyz jsem to pouzival, tak jsem musel jeste dopsat kodovani do win-1250.