不需要的新行字符串/ fputcsv

时间:2014-07-21 18:06:25

标签: php fputcsv

所以我正在尝试使用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 ,,,

"溴化物。"有一条新线......

2 个答案:

答案 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);