13

我有一个 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. 结合以上所有方法。

无论如何,最终结果仍然是一个混乱的 CSV,它会在用户输入的任何换行符处中断。我已经设法阻止了文本区域的新换行符,但是有很多遗留的提交也需要我在 CSV 端解决这个问题。

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

4

4 回答 4

17

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

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

$field = str_replace(array("\r\n", "\n\r", "\n", "\r"), ',', $original_field);
于 2015-07-30T14:20:24.163 回答
9

使用双引号:

$field = str_replace(array("\n", "\r", "\r\n", "\n\r"), ',', $original_field);
于 2012-10-31T13:12:04.490 回答
4

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

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

$field = preg_replace('/[\n\r]+/', ',', trim($original_field));
于 2012-10-31T13:20:52.800 回答
2

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

于 2012-10-31T13:11:08.857 回答