如何删除所有换行符以生成正确的CSV?

时间:2012-10-31 13:10:05

标签: php csv

我有一个textarea在一个正常工作的网站上提交到我的数据库。但是当我从我的数据库生成CSV(通过PHP)时,所有换行符都会破坏生成的CSV。任何CSV阅读器都会将输入中的换行符解释为换行符。

我尝试了以下方法:

  1. 将字段用引号括起来。

  2. 此:

    $field = str_replace(array('\n', '\r', '\r\n', '\n\r'), ',', $original_field);
    
  3. 还有:

    $field = strip_tags(nl2br($original_field));
    
  4. 结合上述所有方法。

  5. 无论如何,结尾的结果仍然是乱七八糟的CSV,它将在用户输入的任何换行符中断开。我已经设法阻止文本区域中的新换行符,但是还有很多遗留提交要求我在CSV端修复此问题。

    为什么不起作用?我该如何解决这个问题?

5 个答案:

答案 0 :(得分:13)

在接受的答案(用户user1517891)不正确之前,当有\r\n时,它会在字符串中替换两次......它会将其替换为两个逗号,。首先,它将取代\r => ,,然后\n => ,

您需要以不同的顺序使用它,如:

$field = str_replace(array("\r\n", "\n\r", "\n", "\r"), ',', $original_field);

答案 1 :(得分:9)

使用双引号:

$field = str_replace(array("\n", "\r", "\r\n", "\n\r"), ',', $original_field);

答案 2 :(得分:3)

我建议使用preg_replace()而不是str_replace()。原因是\r\n可能有多个换行符和组合,我希望您只想用一个逗号替换它们。

我还建议使用trim()删除尾随空行。

$field = preg_replace('/[\n\r]+/', ',', trim($original_field));

答案 3 :(得分:2)

您必须将\n和类似标记放在双引号中,否则它们将被视为简单字符串而不是换行符。

答案 4 :(得分:1)

如果您使用fputcsv(),则此问题甚至不应存在:

fputcsv($f, array($field1, $field2, $field3));

默认情况下,它使用逗号作为分隔符,并使用双引号作为字符串封装。