Php 不需要的新行字符串/fputcsv

Php 不需要的新行字符串/fputcsv,php,fputcsv,Php,Fputcsv,所以我尝试使用fputcsv,它工作起来,几乎就像它的意图一样。我有一个奇怪的问题,我似乎无法解决,我没有找到任何好的文档,甚至没有人有这个问题 当有一个字符串放在CSV中时,它大部分时间都很好,但是有时它没有理由地在字符串中间启动一个新的行,当我进入MySQL DB时,它不会显示任何代码,比如“代码>\N\/C>”,甚至是一个奇怪的字符。p> 它只是无缘无故地开始了一个新行,我有时看到的是,有一个“长”字是这样写的:“今天是星期六,明天是星期天”,然后它在明天之后开始了一个新行,句号和下一个单

所以我尝试使用fputcsv,它工作起来,几乎就像它的意图一样。我有一个奇怪的问题,我似乎无法解决,我没有找到任何好的文档,甚至没有人有这个问题

当有一个字符串放在CSV中时,它大部分时间都很好,但是有时它没有理由地在字符串中间启动一个新的行,当我进入MySQL DB时,它不会显示任何代码,比如“代码>\N\/C>”,甚至是一个奇怪的字符。p> 它只是无缘无故地开始了一个新行,我有时看到的是,有一个“长”字是这样写的:“今天是星期六,明天是星期天”,然后它在明天之后开始了一个新行,句号和下一个单词之间没有空格,但这似乎不是开始一个新行的好理由

当我打印出数组时,它也有相同的行在该点结束。。。有人知道会是什么吗

如果这没有任何意义,我很抱歉

编辑:添加代码和示例

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,Name,Firstname,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“


在“brommer”之后有一行新的

好的,我终于找到了一个解决方案,我从两天前就开始寻找了。似乎有一些隐藏字符,因为当我让PHP使用函数preg\u replace并将其置于条件“\n-\x0B-\r”中时,问题就解决了


我想如果将来有人碰巧遇到这个问题,我会和大家分享。

我用preg\u 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);

“它不显示任何类似于,
/n
”的内容-您是否100%确定它是
/n
?对于换行符,语法是
\n
,如果这对代码有影响的话。显示代码和
.csv
示例将有助于了解这个主题。@Fred ii-添加了示例和代码:)是的,我的意思是\n对此表示抱歉。因为您的stripslashes(),一个简单的“\n”-不是控制字符,只是一个反斜杠后跟一个n-,我认为会在输出中变成换行符。您能仔细检查源数据库中有哪些列是换行的吗?(您可能需要逐个字符进行检查,例如,使用
选择ASCII(子字符串(列名称,34))…
查找第34个字符的确切ASCII值…)这样的方法,您的示例换行符出现在句子的确切末尾,这似乎是一个可疑的巧合。我猜在你的源数据中只有一条新线。