После много scrafffing вокруг и некоторые довольно утомительно проверка характера, у меня есть версия упоминаемых выше кодов по Diego и Mahn, что будет правильно раздеть encasings и заменить двойные кавычки на всех полях в fputcsv
. а затем вывести файл в браузер для загрузки.
У меня также была второстепенная проблема, заключающаяся в том, что вы не можете быть уверены, что двойные кавычки всегда или никогда не исчезали.
В частности, при выводе непосредственно в браузер с использованием потока ввода php: //, на который ссылается Диего. Chr(127)
является символом пробела, поэтому файл CSV имеет несколько пробелов, чем в противном случае, но я считаю, что это оборачивает проблему chr(0)
NULL символов в UTF-8.
/***
* @param $value array
* @return string array values enclosed in quotes every time.
*/
function encodeFunc($value) {
///remove any ESCAPED double quotes within string.
$value = str_replace('\\"','"',$value);
//then force escape these same double quotes And Any UNESCAPED Ones.
$value = str_replace('"','\"',$value);
//force wrap value in quotes and return
return '"'.$value.'"';
}
$result = $array_Set_Of_DataBase_Results;
$fp = fopen('php://output', 'w');
if ($fp && $result) {
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="export-'.date("d-m-Y").'.csv"');
foreach($result as $row) {
fputcsv($fp, array_map("encodeFunc", $row), ',', chr(127));
}
unset($result,$row);
die;
}
Надеюсь, это полезно для некоторых.
Просто интересно, так как я думаю, что вы вопрос был: повторно в 'Magento/Varien_Io_File :: streamWriteCsv()' (который в конечном счете просто использует 'fputcsv'), сделал вы когда-нибудь находите хорошее решение для этого? Возможно, используется 'Varien_File_Csv'? – pspahn
@pspahn Никогда не делал (и это было четыре года назад, но я не думаю, что это было связано конкретно с Magento) –