在 PHP 中,如何将文本区域中的文本(以新行分隔)拆分为数组?

38
我可以做到这样吗:
explode("\n", $_POST['thetextarea']);

如何使其在所有平台上都能正常工作?(我要问的问题是,它将永远是\r\n而不仅仅是\n吗?)

编辑:

我忘了提到我正在将 $_POST['thetextarea'] 保存到一个 mysql 数据库 VARCHAR 255。似乎 \r\n 会被转换为 \n。


1
可能是 https://dev59.com/FUfRa4cB1Zd3GeqP7kAB 的重复问题,该问题涉及 HTML 表单中的行尾区分。 - Arnaud Le Blanc
如果文本字段包含\r\n,那么按换行符分割仍然有效,并保留行中多余的回车符号。 - mario
4个回答

101

如果给定\r\n\r\n,以下代码可以解决问题:

preg_split('/\r\n|[\r\n]/', $_POST['thetextarea'])

1
是的,对我也起作用了,不是 \r\n 的那个。 - khany
使用双引号代替单引号"/\r\n|[\r\n]/",这样稍微有些不同,但对我起作用了。我不知道为什么。 - Vahid

24

1
然而,并非所有的用户代理都是浏览器。 - mario
@mario:根据HTML5规范(我知道是草案),行以CRLF终止。如果我没记错的话,可以参考http://dev.w3.org/html5/spec/Overview.html#the-textarea-element。 - PeeHaa
新链接为http://w3c.github.io/html/sec-forms.html#the-textarea-element。 - piotr_cz

12

你也可以使用PHP_EOL常量:

explode(PHP_EOL, $_POST['thetextarea']);

12
PHP_EOL不会直接使用当前平台的换行符吗?如果是的话,你就不需要在这里使用它 :) - PeeHaa

2
你可以像这样做:

您可以采取以下措施:

$text = trim($_POST['textareaname']);
$text = nl2br($text);

1
重要的是要记住,此函数不会用 <br> 标签替换换行符。相反,它会在每个换行符之前插入一个 <br> 标签,但仍然保留换行符本身!——来自 php.net 手册的人 - Robbe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接