按新行分解 PHP 字符串
2022-08-30 06:02:50
很简单,对吧?好吧,这不起作用:-\
$skuList = explode('\n\r', $_POST['skuList']);
很简单,对吧?好吧,这不起作用:-\
$skuList = explode('\n\r', $_POST['skuList']);
最佳实践
如第一个答案的注释中提到的,最佳做法是使用PHP常量PHP_EOL它表示当前系统的EOL(行尾)。
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP提供了许多其他非常有用的常量,您可以使用它们来使您的代码系统独立,请参阅此链接以查找有用且与系统无关的目录常量。
警告
这些常量使页面系统独立,但是当您将这些常量用于存储在另一个系统上的数据时,从一个系统移动到另一个系统时可能会遇到问题。新系统的常量可能与以前系统的常量不同,并且存储的数据可能不再有效。因此,在存储数据之前完全解析数据以删除任何与系统相关的部分。
更新
Andreas的评论让我意识到,我在这里介绍的“最佳实践”解决方案不适用于所描述的用例:服务器的EOL(PHP)与浏览器(任何操作系统)使用的EOL没有任何关系,但(浏览器)是字符串的来源。
因此,请使用@Alin_Purcaru的解决方案来涵盖您的所有基础:
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
涵盖所有情况。不要依赖您的输入来自 Windows 环境。
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
或
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);