我在网站上有一个文本方面的文本方面,该网站正常工作。但是,当我从数据库中生成一个CSV(通过PHP)时,所有的线路断裂都会与结果CSV混乱。任何CSV读取器都会将从输入的线路断开为新线路。
我尝试了以下方法:
-
将字段封装在引号。
-
此:
$field = str_replace(array('n', 'r', 'rn', 'nr'), ',', $original_field);
-
另外:
$field = strip_tags(nl2br($original_field));
-
结合上述所有方法。
无论如何,结束结果仍然是一个混乱的CSV,它将在用户输入的任何线路中断。我已经设法阻止了文本区域的新线路休息,但是还有很多旧的提交也需要我在CSV方面进行修复。
为什么不起作用?我该如何解决此问题?
在接受答案(用户user1517891
的)不正确之前,它将在有rn
时两次替换为字符串...它将替换为两个逗号,
。首先,它将替换r
=> ,
,然后n
=> ,
。
您需要以不同的顺序使用它,为:
$field = str_replace(array("rn", "nr", "n", "r"), ',', $original_field);
使用双引号:
$field = str_replace(array("n", "r", "rn", "nr"), ',', $original_field);
我建议使用preg_replace()
而不是str_replace()
。原因是r
和n
可能有多种新线和组合,我希望您只想用一个逗号替换它们。
我还建议使用 trim()
删除尾随的空白。
$field = preg_replace('/[nr]+/', ',', trim($original_field));
您必须将n
和类似标签放入双引号中,否则它们将被视为简单的字符串,而不将其视为线折。