Простой, не так ли? Ну, это не работает: -\
$skuList = explode('\n\r', $_POST['skuList']);
Простой, не так ли? Ну, это не работает: -\
$skuList = explode('\n\r', $_POST['skuList']);
Лучшая практика
Как упоминалось в комментарии к первому ответу, лучше всего использовать PHP-константу PHP_EOL, которая представляет текущую системную EOL (конец строки).
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP предоставляет много других очень полезных констант, которые вы можете использовать, чтобы сделать вашу систему кода независимой. Посмотрите эту ссылку, чтобы найти полезные и системные независимые константы каталога.
Предупреждение
Эти константы делают вашу систему страниц независимой, но у вас могут возникнуть проблемы при переходе из одной системы в другую, когда вы используете константы с данными, хранящимися в другой системе. Новые системные константы могут отличаться от предыдущей системы, и сохраненные данные могут больше не работать. Поэтому полностью проанализируйте ваши данные, прежде чем хранить их, чтобы удалить любые системные зависимые части.
ОБНОВИТЬ
Комментарий Андреаса заставил меня понять, что представленное здесь решение "Best Practice" не относится к описанному сценарию использования: сервер 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']);
Попробуйте "\n\r"
(двойные кавычки) или просто "\n"
.
Если вы не знаете, какой тип EOL у вас есть, запустите str_replace перед вашим взрывом, заменив "\n\r" на "\n".
Здесь много всего:
\r\n
, а не \n\r
.\n
без \r
(или даже в необычных случаях, возможно, только \r
)Учитывая последнюю точку, вы можете найти preg_split()
, используя все возможные варианты, что даст вам более надежный способ разделения данных, чем explode()
. Но в качестве альтернативы вы можете использовать explode()
только с помощью \n
, а затем использовать trim()
для удаления любых символов \r
, которые остаются висящими.
эта функция php взорвет строку с помощью новой строки
Внимание: новая строка в Windows \r\n, а в Linux и Unix - \n
эта функция меняет все новые строки на режим linux, а затем разделяет их.
обратите внимание, что пустые строки будут игнорироваться
function splitNewLine($text) {
$code=preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$text)));
return explode("\n",$code);
}
Пример изображения
$a="\r\n\r\n\n\n\r\rsalam\r\nman khobam\rto chi\n\rche khabar\n\r\n\n\r\r\n\nbashe baba raftam\r\n\r\n\r\n\r\n";
print_r( splitNewLine($a) );
Выход
Array
(
[0] => salam
[1] => man khobam
[2] => to chi
[3] => che khabar
[4] => bashe baba raftam
)
попробовать
explode(chr(10), $_POST['skuList']);
Для новой строки это просто
$list = explode("\n", $text);
Для новой строки и возврата каретки (как в файлах Windows) она будет опубликована. Является ли ваш skuList текстовой областью?
Поместите \n
в двойные кавычки:
explode("\n", $_POST['skuList']);
В одинарных кавычках, если я не ошибаюсь, это рассматривается как \
и n
отдельно.
Вы пытались использовать двойные кавычки?
Не идеально, но я думаю, что это должно быть безопаснее. Добавить nl2br:
$skuList = explode('<br />', nl2br($_POST['skuList']));
Попробуйте следующее:
explode(PHP_EOF, $lines);
Прежде всего, я думаю, что обычно \r\n
, во-вторых, это не то же самое для всех систем. Это будет работать только на окнах. Это раздражает, пытаясь понять, как заменить новые строки, потому что разные системы относятся к ним по-разному (см. здесь). Вам может быть повезло с помощью \n
.
Если кто-то еще попробовал это, но он не работал, это напоминание о том, что вы, возможно, сделали тот же мозговой пердит, что и я.
У вас mysql вытеснили строку сначала? В этом случае символ новой строки больше не является символом новой строки.
Я не делал ничего, чтобы избежать его разбора, просто адаптировался и взорвался '\n' (буквально обратная косая черта и n, а не фактический символ новой строки.
Потеря линии прерывается от публикации из входных текстовых полей?
То, что работает быстрее для меня, - это скопировать любой текст или тип таблицы Excel или HTML или тип данных новой строки и вставить его в текстовое поле вместо inputextbox:
это сохраняет целостность строк в POST.
<textarea id="txtArea" name="txtArea" rows="40" cols="170"></textarea>
<br>
<input type="submit" value="split lines into array" />
в форме получаемого файла:
$txtArea ='';
$txtArea = $_POST['txtArea'];
$TA = $_POST['txtArea'];
$string = $TA;
$array = preg_split ('/$\R?^/m', $string);
// or any of these:
// $array = explode(PHP_EOL,$string);
// $array = explode("\n", $txtArea);
echo "<br>A0: ".$array[0];
echo "<br>A1: "[email protected]$array[1];
echo "<br>A2: "[email protected]$array[2];
Этот метод всегда работает для меня:
$uniquepattern="@#$;?:~#abcz"//Any set of characters which you dont expect to be present in user input $_POST['skuList'] better use atleast 32 charecters.
$skuList=explode($uniquepattern,str_replace("\r","",str_replace("\n",$uniquepattern,$_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);
Вы можете попробовать это с помощью регулярных выражений:
$skuList = explode('/[\r\n]+/', $_POST['skuList']);
Вот что сработало для меня. Протестировано в PHP 5.6, а также в PHP 7.0:
$skuList = str_replace("\\r\\n", "\n", $_POST['skuList']);
$skuList = str_replace("\\n\\r", "\n", $skuList);
$skuList = preg_split("/\n/", $skuList);
print_r($skuList);
Как легко, как кажется
$skuList = explode('\\n', $_POST['skuList']);
Вам просто нужно передать точный текст "\n", и запись \n напрямую используется в качестве Escape-последовательности. Так что "\\", чтобы пройти простой обратный слеш, а затем поставить "н"