所以我正在尝试使用fputcsv,它的工作方式,几乎就像是有意的。我有这个奇怪的问题,我似乎无法解决,我找不到任何好的文档,甚至没有找到这个问题的人。
当有一个字符串放在csv中时,它在大多数情况下都很顺利,但是有时它会在字符串中间开始一个新行,当我进入MySQL数据库时它会这样做不显示像\n
这样的东西,甚至是一个奇怪的角色。
它只是无缘无故地开始一条新线,我有时看到的是有一个" long"写得这样的字:"今天是星期六。明天是星期天"然后它会在明天之后开始一个新的行,期间和下一个单词之间没有空格,但这似乎不是开始新行的好理由?
当我打印出阵列时,它也会在该位置结束相同的行...任何人都知道它可能是什么?
如果这没有任何意义,我道歉......
编辑:添加了代码和示例
public function actionExportCSV()
{
$model = Vicreg::model()->findAllByAttributes(array('event_id' => $_GET['eventid']));
if($model){
$output = fopen("php://output",'w') or die("Can't open php://output");
header("Content-Type:application/csv");
header("Content-Disposition:attachment;filename=verzorgingen.csv");
fputcsv($output, array('id','event_id','name','firstname','dob','sex','urgency','pathology','pathology_other','treatment','treatment_other','medication','medication_other','material_other','material','docs','hour_in','hour_out','station_id','nurses_id','transport_id','hospital_id','ambulance_id','closed'));
foreach($model as $vicreg) {
$array = array();
//if($vicreg->id == "83") { print_r($vicreg); exit(0); }
foreach($vicreg->attributes as $key => $attribute) {
$attribute = str_replace(' ', '', $attribute);
$array[$key] = trim(stripslashes($attribute));
}
fputcsv($output, $array, ',' ,'"');
}
fclose($output) or die("Can't close php://output");
} else {
throw new CHttpException(422, 'Geen evenement opgegeven');
}
}
实施例
83,4,姓名,名字,1970-01-01,1,3,4,"普通字符串",1," dagelijks 2X te verzorgen。 brandwonden 3 dagen geleden opgelopen door knalpot van brommer。
voornamelijk 2de graads brandwonden + open wonde" ,,,,,," date"," date",5 ,,,1 ,,,
"溴化物。"有一条新线......
答案 0 :(得分:0)
好的,所以我终于找到了一个解决方案,我从2天前开始一直在寻找。看来有一些隐藏的角色,因为当我使用PHP时使用函数preg_replace并放入条件" \ n- \ x0B- \ r"问题解决了。
如果有人在将来碰巧遇到这个问题,我想分享一下。
答案 1 :(得分:0)
我用preg_replace来解决这个问题, 所以这是我对同一问题的解决方案:
// $res: array of strings (with new lines)
foreach($res as $raw){
$arr[] = preg_replace('/\s+/', ' ', trim($raw)); // Remove newlines from str
}
fputcsv($out, $arr);