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

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

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

Ответ 1

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

Как упоминалось в комментарии к первому ответу, лучше всего использовать 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']);

Ответ 2

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

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

или

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

Ответ 3

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

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

Ответ 4

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

  • Вам нужно использовать двойные кавычки, а не одинарные кавычки, иначе экранированные символы не будут экранированы.
  • Нормальная последовательность \r\n, а не \n\r.
  • В зависимости от источника вы можете просто получать \n без \r (или даже в необычных случаях, возможно, только \r)

Учитывая последнюю точку, вы можете найти preg_split(), используя все возможные варианты, что даст вам более надежный способ разделения данных, чем explode(). Но в качестве альтернативы вы можете использовать explode() только с помощью \n, а затем использовать trim() для удаления любых символов \r, которые остаются висящими.

Ответ 5

эта функция 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
)

Ответ 6

попробовать

explode(chr(10), $_POST['skuList']);

Ответ 7

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

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

Для новой строки и возврата каретки (как в файлах Windows) она будет опубликована. Является ли ваш skuList текстовой областью?

Ответ 8

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

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

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

Ответ 9

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

Ответ 10

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

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

Ответ 11

Попробуйте следующее:

explode(PHP_EOF, $lines);

Ответ 12

Прежде всего, я думаю, что обычно \r\n, во-вторых, это не то же самое для всех систем. Это будет работать только на окнах. Это раздражает, пытаясь понять, как заменить новые строки, потому что разные системы относятся к ним по-разному (см. здесь). Вам может быть повезло с помощью \n.

Ответ 13

Если кто-то еще попробовал это, но он не работал, это напоминание о том, что вы, возможно, сделали тот же мозговой пердит, что и я.

У вас mysql вытеснили строку сначала? В этом случае символ новой строки больше не является символом новой строки.

Я не делал ничего, чтобы избежать его разбора, просто адаптировался и взорвался '\n' (буквально обратная косая черта и n, а не фактический символ новой строки.

Ответ 14

Потеря линии прерывается от публикации из входных текстовых полей?
То, что работает быстрее для меня, - это скопировать любой текст или тип таблицы 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];

Ответ 15

Этот метод всегда работает для меня:

$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'])));

Ответ 16

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);

Ответ 17

Вы можете попробовать это с помощью регулярных выражений:

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

Ответ 18

Вот что сработало для меня. Протестировано в 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);

Ответ 19

Как легко, как кажется

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

Вам просто нужно передать точный текст "\n", и запись \n напрямую используется в качестве Escape-последовательности. Так что "\\", чтобы пройти простой обратный слеш, а затем поставить "н"