@ Гордон: Ха, я видел, что сказал полковник Шрапнель в этом другом вопросе. Как-то грустно на самом деле. Добавление моего близкого голосования все же.
BoltClock
9
В дополнение к одиночным кавычкам, упомянутым другими, пары CRLF - \r\nне наоборот.
Powerlord 22.10.10
1
Постарайтесь запомнить это: \ R etur \ N
l00k
Ответы:
410
Лучшая практика
Как упоминалось в комментарии к первому ответу, лучше всего использовать PHP-константу PHP_EOL, которая представляет EOL ( конец строки ) текущей системы .
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP предоставляет множество других очень полезных констант, которые вы можете использовать, чтобы сделать вашу систему кода независимой, посмотрите эту ссылку, чтобы найти полезные и системные независимые константы каталога.
Предупреждение
Эти константы делают вашу систему страниц независимой, но вы можете столкнуться с проблемами при переходе от одной системы к другой, когда вы используете константы с данными, хранящимися в другой системе. Константы новой системы могут отличаться от прежних, и сохраненные данные могут больше не работать. Поэтому полностью проанализируйте ваши данные, прежде чем хранить их, чтобы удалить любые системные компоненты.
ОБНОВИТЬ
Комментарий Андреаса заставил меня осознать, что представленное здесь решение «Best Practice» не относится к описанному сценарию использования: EOL (PHP) сервера не имеет ничего общего с EOL, который использует браузер (любая ОС), но это (браузер), откуда приходит строка.
Поэтому, пожалуйста, используйте решение от @Alin_Purcaru ( три внизу ), чтобы охватить все ваши базы (и подтвердить его ответ):
Это новый ответ, но это, вероятно, лучший и правильно принятый ответ
frazras
Это странно, так как именно PHP хочет, чтобы вы это делали :) Можете ли вы дать мне больше информации о вашей ОС и версии PHP, возможно, фрагмент кода на PasteBin или sth. аналогичный?
Ларзан
16
Вы не можете использовать PHP_EOL, потому что система и источник ввода не имеют ничего общего друг с другом. Если пользователь вставит новые строки в Windows, а PHP работает в Linux, результат может быть поврежден.
barell
1
Точно @barell, это ситуация, которую я описываю в части «предупреждение»;) В вопросе прямо не указано, что это старый ввод, хранящийся в базе данных. Пожалуйста, прочитайте часть «Предупреждение», и вы увидите, что я освещаю эту ситуацию там.
Ларзан
7
Этот ответ просто неверен для этого варианта использования. Не используйте константу PHP_EOL в этом случае, поскольку источник ввода (например, браузер пользователя) определенно не ваша система. Используйте решение, которое позаботится обо всех концах строк (ответ от Алина Пуркару).
Андреас
241
Покройте все случаи. Не надейтесь, что ваш вклад поступает из среды Windows.
Это приведет к пустым элементам массива, если eol есть \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']);
webbiedave
2
@webbiedave PREG_SPLIT_NO_EMPTY - это хорошо, НО это удалит пустые строки. Это может или не может быть желательным.
JMS
Этот шаблон будет соответствовать каждой букве для меня, потому что это приводит к успеху, даже если ничего не присутствует. "?" означает 0 или один раз, так что возможно совпадение, даже если отсутствуют \ r и \ n. Вы говорите «исправлено», но я этого не вижу. Я использовал / (\ r | \ n) + / вместо этого.
Рольф
1
@Rolf Кажется, я сделал редактирование в спешке. Исправил это сейчас. Что вы должны использовать, зависит от того, хотите ли вы пустые строки или нет в выходных данных. Опция из моего ответа также возвращает пустые строки.
Алин Пуркару
3
@AlinPurcaru Можете ли вы уточнить в ответе, что (оба, ни, ни?) Вернет пробелы, а какие нет?
Патрик
150
Попробуйте "\n\r"(двойные кавычки) или просто "\n".
Если вы не уверены, какой у вас тип EOL, запустите str_replace перед разнесением, заменив «\ n \ r» на «\ n».
Одиночные кавычки в PHP означают «не разбирать эту строку». Это означает, что ваши управляющие символы не анализируются, они воспринимаются как литералы (не разрыв строки и возврат каретки, а фактический литерал '\ n \ r'). Использование двойных кавычек означает «синтаксический анализ этой строки», и, следовательно, ваши управляющие символы будут проанализированы. +1
Райан Кинал
17
/n/r? Я знаю, что ОП написал, но правильные окна\r\n
webbiedave
20
Рассмотрим PHP конец строки постоянной: PHP_EOL.
Дэниел У.
Привет всем, это, безусловно, правильный ответ! Мне интересно, почему @Alin Purcaru ответ получил 44 голоса .. Это неправильно !!! Он не всегда работает правильно, хотя кажется, что он делает свою работу .. Итак, вот мой комментарий для тех, кто придерживается одного и того же
Рафик Бари
3
Просто не обращайте внимания на \ r, последняя ОС, которая использовала его без \ n, была OS9 ( en.wikipedia.org/wiki/Newline#Representations ). Поэтому это даст вам лучшие результаты:explode("\n", str_replace("\r", '', $string));
DanielM
15
Много вещей здесь:
Вы должны использовать двойные кавычки, а не одинарные, иначе экранированные символы не будут экранированы.
Нормальная последовательность есть \r\n, нет \n\r.
В зависимости от источника, вы можете просто получать \nбез \r(или даже в необычных случаях, возможно, только \r)
Учитывая последний момент, вы можете обнаружить, что preg_split()использование всех возможных вариантов даст вам более надежный способ разделения данных, чем explode(). Но в качестве альтернативы вы можете использовать explode()только что \n, а затем использовать, trim()чтобы удалить любые \rсимволы, которые остаются вокруг.
Внимание : новая строка в 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
)
Вам просто нужно передать точный текст "\ n", и запись \ n напрямую используется в качестве Escape-последовательности. Так что "\\", чтобы пройти простой обратный слеш, а затем поставить "н"
Во-первых, я думаю, что обычно \r\n, во-вторых, они не одинаковы во всех системах. Это будет работать только на окнах. Немного раздражает попытка выяснить, как заменить новые строки, потому что разные системы обрабатывают их по-разному (см. Здесь ). Возможно, вам повезет больше всего \n.
делать какие-либо строковые манипуляции после выхода из mysql абсолютно бессмысленно
Твой здравый смысл
0
Потерять разрывы строк от публикации из текстовых полей ввода?
Что работает быстрее для меня, так это скопировать и вставить любой текст или данные таблицы Excel или HTML или данные новой строки и вставить их в текстовую область вместо inputextbox: это сохраняет разрывы строк без изменений в POST.
<textareaid="txtArea"name="txtArea"rows="40"cols="170"></textarea><br><inputtype="submit"value="split lines into array"/>
$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);
\r\n
не наоборот.Ответы:
Лучшая практика
Как упоминалось в комментарии к первому ответу, лучше всего использовать PHP-константу PHP_EOL, которая представляет EOL ( конец строки ) текущей системы .
PHP предоставляет множество других очень полезных констант, которые вы можете использовать, чтобы сделать вашу систему кода независимой, посмотрите эту ссылку, чтобы найти полезные и системные независимые константы каталога.
Предупреждение
Эти константы делают вашу систему страниц независимой, но вы можете столкнуться с проблемами при переходе от одной системы к другой, когда вы используете константы с данными, хранящимися в другой системе. Константы новой системы могут отличаться от прежних, и сохраненные данные могут больше не работать. Поэтому полностью проанализируйте ваши данные, прежде чем хранить их, чтобы удалить любые системные компоненты.
ОБНОВИТЬ
Комментарий Андреаса заставил меня осознать, что представленное здесь решение «Best Practice» не относится к описанному сценарию использования: EOL (PHP) сервера не имеет ничего общего с EOL, который использует браузер (любая ОС), но это (браузер), откуда приходит строка.
Поэтому, пожалуйста, используйте решение от @Alin_Purcaru ( три внизу ), чтобы охватить все ваши базы (и подтвердить его ответ):
источник
Покройте все случаи. Не надейтесь, что ваш вклад поступает из среды Windows.
или
источник
\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, а затем разделяет их.
обратите внимание, что пустые строки будут игнорироваться
пример
вывод
источник
пытаться
источник
Для новой линии это просто
Для новой строки и возврата каретки (как в файлах Windows), это как вы отправили. Ваш skuList является текстовой областью?
источник
Поместите
\n
в двойные кавычки:explode("\n", $_POST['skuList']);
В одинарных кавычках, если я не ошибаюсь, это трактуется как
\
иn
отдельно.источник
Вы пытались использовать двойные кавычки?
источник
Не идеально, но я думаю, что это должно быть безопаснее. Добавьте nl2br :
источник
Попробуй это:
источник
Так легко, как кажется
Вам просто нужно передать точный текст "\ n", и запись \ n напрямую используется в качестве Escape-последовательности. Так что "\\", чтобы пройти простой обратный слеш, а затем поставить "н"
источник
Во-первых, я думаю, что обычно
\r\n
, во-вторых, они не одинаковы во всех системах. Это будет работать только на окнах. Немного раздражает попытка выяснить, как заменить новые строки, потому что разные системы обрабатывают их по-разному (см. Здесь ). Возможно, вам повезет больше всего\n
.источник
Если кто-то попробовал это, но это не сработало, это напоминание о том, что вы, возможно, сделали то же самое, что и я.
MySQL сначала избежал строки? В этом случае символ новой строки больше не является символом новой строки.
Я ничего не делал, чтобы избежать его разбора, просто адаптировал и взорвал '\ n' (буквально обратный слеш и n, а не реальный символ новой строки.
источник
Потерять разрывы строк от публикации из текстовых полей ввода?
Что работает быстрее для меня, так это скопировать и вставить любой текст или данные таблицы Excel или HTML или данные новой строки и вставить их в текстовую область вместо inputextbox: это сохраняет разрывы строк без изменений в POST.
в форме получения файла:
источник
Этот метод всегда работает для меня:
источник
Попробуй это:
источник
Вы можете попробовать это с помощью регулярных выражений:
$skuList = explode('/[\r\n]+/', $_POST['skuList']);
источник
Вот что сработало для меня. Протестировано в PHP 5.6, а также в PHP 7.0:
источник