Просто, правда? Ну, это не работает
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
не наоборот.
Просто, правда? Ну, это не работает
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
не наоборот.
Ответы:
Лучшая практика
Как упоминалось в комментарии к первому ответу, лучше всего использовать 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']);
\r\n
. Чтобы предотвратить это, либо использовать: preg_split('/\n|\r/', $_POST['skuList'], -1, PREG_SPLIT_NO_EMPTY);
(обратите внимание , что \r\n
становится ненужной при использовании этого флага) или просто поставить \r\n
перед тем в \r
:preg_split('/\r\n|\n|\r/', $_POST['skuList']);
Попробуйте "\n\r"
(двойные кавычки) или просто "\n"
.
Если вы не уверены, какой у вас тип EOL, запустите str_replace перед разнесением, заменив «\ n \ r» на «\ n».
/n/r
? Я знаю, что ОП написал, но правильные окна\r\n
PHP_EOL
.
explode("\n", str_replace("\r", '', $string));
Много вещей здесь:
\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
)
Для новой линии это просто
$list = explode("\n", $text);
Для новой строки и возврата каретки (как в файлах Windows), это как вы отправили. Ваш skuList является текстовой областью?
Поместите \n
в двойные кавычки:
explode("\n", $_POST['skuList']);
В одинарных кавычках, если я не ошибаюсь, это трактуется как \
и n
отдельно.
Так легко, как кажется
$skuList = explode('\\n', $_POST['skuList']);
Вам просто нужно передать точный текст "\ n", и запись \ n напрямую используется в качестве Escape-последовательности. Так что "\\", чтобы пройти простой обратный слеш, а затем поставить "н"
Во-первых, я думаю, что обычно \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: ".@$array[1];
echo "<br>A2: ".@$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);
Вот что сработало для меня. Протестировано в 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);