简单,是吧?嗯,这是行不通的:-\
$skuList = explode('\n\r', $_POST['skuList']);
简单,是吧?嗯,这是行不通的:-\
$skuList = explode('\n\r', $_POST['skuList']);
当前回答
涵盖所有情况。不要依赖于您的输入来自Windows环境。
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
or
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
其他回答
PHP_EOL表面上用于以跨平台兼容的方式查找换行符,因此它可以处理DOS/Unix问题。
试试这个:
$myString = "Prepare yourself to be caught
You in the hood gettin' shot
We going throw hell of blows
got my whole frame froze";
$myArray = explode(PHP_EOL, $myString);
print_r($myArray);
首先,我认为通常是\r\n,其次,这些在所有系统中都不一样。这只对窗口有效。试图弄清楚如何替换新行有点烦人,因为不同的系统对它们的处理不同(见这里)。你可能会有更好的运气只\n。
保留换行符(作为数组中的空白项):
$skuList = preg_split('/\r\n|\n\r|\r|\n/', $_POST['skuList']);`
它处理不寻常的\n\r以及常见的\n\r, \n和\r。注意,来自@Alin_Purcaru的解决方案非常相似,但不处理\n\r。
删除换行符(数组中没有空白项):
$skuList = preg_split('/[\r\n]+/', $_POST['skuList']);
PHP测试 这些表达式已在以下操作系统上测试:ubuntu-20.04, ubuntu-18.04, windows-2022, windows-2019, windows-2016, macos-11, macos-10.15和以下PHP版本:8.0,7.4,7.3,7.2,7.1,7.0
下面是PHP测试类: https://github.com/rosell-dk/exec-with-fallback/blob/main/tests/LineSplittingTest.php
一个成功的CI运行在一个运行这些测试的项目上: https://github.com/rosell-dk/exec-with-fallback/actions/runs/1520070091
原理的Javascript演示 下面是一些类似正则表达式的javascript演示(我使用N和R而不是\ N和\ R)。
保留换行演示:https://regexr.com/6ahvl 删除换行演示:https://regexr.com/6ai0j
PS:目前在regexr中有一个错误,导致它在第一次加载时显示“错误”。编辑表达式可以消除错误
虽然不完美,但我认为这是最安全的。添加nl2br:
$skuList = explode('<br />', nl2br($_POST['skuList']));
把\n放在双引号中:
explode(“\n”, $_POST['skuList']);
在单引号中,如果我没有记错的话,它被分别视为\和n。