Развернуть строку PHP новой строкой

Простой, не так ли? Ну, это не работает: – \

$skuList = explode('\n\r', $_POST['skuList']); 

Solutions Collecting From Web of "Развернуть строку PHP новой строкой"

Лучшая практика

Как упоминалось в комментарии к первому ответу, наилучшей практикой является использование PHP-константы PHP_EOL, которая представляет EOL текущей системы ( End Of Line ).

 $skuList = explode(PHP_EOL, $_POST['skuList']); 

PHP предоставляет множество других очень полезных констант, которые вы можете использовать, чтобы сделать вашу систему кода независимой, см. Эту ссылку, чтобы найти полезные и независимые от системы константы каталога.

Предупреждение

Эти константы делают вашу систему страниц независимой, но вы можете столкнуться с проблемами при переходе из одной системы в другую, когда используете константы с данными, хранящимися в другой системе. Константы новой системы могут отличаться от предыдущих систем, и сохраненные данные могут больше не работать. Поэтому полностью проанализируйте свои данные, прежде чем хранить их, чтобы удалить любые зависящие от системы компоненты.

ОБНОВИТЬ

Комментарий Андреаса заставило меня понять, что представленное здесь решение «Лучшая практика» не относится к описанному варианту использования: EOL (PHP) сервера не имеет ничего общего с EOL, который использует браузер (любая ОС) но это (браузер), откуда идет строка.

Поэтому, пожалуйста, воспользуйтесь решением от @Alin_Purcaru ( три вниз ), чтобы охватить все ваши базы (и повысьте его ответ):

 $skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']); 

Попробуйте "\n\r" (двойные кавычки) или просто "\n" .

Если вы не знаете, какой тип EOL у вас есть, запустите str_replace перед вашим взрывом, заменив «\ n \ r» на «\ n».

Покройте все случаи. Не полагайтесь на то, что ваш вход поступает из среды Windows.

 $skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']); 

или

 $skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']); 

Здесь много вещей:

  • Вам нужно использовать двойные кавычки, а не одинарные кавычки, иначе экранированные символы не будут экранированы.
  • Нормальная последовательность – \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']); 

Поместите \n в двойные кавычки:

explode("\n", $_POST['skuList']);

В одинарных кавычках, если я не ошибаюсь, это рассматривается как \ и n отдельно.

Вы пробовали использовать двойные кавычки?

Для новой линии это просто

 $list = explode("\n", $text); 

Для новой строки и возврата каретки (как в файлах Windows), это как вы отправили. Является ли ваш 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: ".@$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']))); 

Не идеально, но я думаю, что это должно быть безопаснее. Добавьте nl2br :

 $skuList = explode('<br />', nl2br($_POST['skuList']));