Надежно удалить строки из строки

Ввод строки поступает из textarea, где пользователи должны вводить каждый отдельный элемент в новой строке.

При обработке формы легко взорвать вход textarea в массив отдельных элементов, например:

$arr = explode("\n", $textareaInput); 

Он работает нормально, но меня беспокоит, что он не работает корректно в разных системах (в настоящее время я могу тестировать только в Windows). Я знаю, что символы новой строки представлены как \ r \ n или как просто \ r на разных платформах. Будет ли приведенная выше строка кода работать корректно в Linux, Solaris, BSD или другой ОС?

'\ r' сам по себе, поскольку терминатор линии – это старое соглашение, которое больше не используется (не с OSX, основанного на Unix).

Ваш explode будет прекрасным. Просто trim «\ r» в каждом результирующем элементе для пользователей Windows.

Вы можете использовать preg_split для этого.

 $arr = preg_split('/[\r\n]+/', $textareaInput); 

Он разбивает его на любую комбинацию символов \r или \n . Вы также можете использовать \s для включения любого символа пробела.

редактировать
Мне пришло в голову, что, хотя предыдущий код работает нормально, он также удаляет пустые строки. Если вы хотите сохранить пустые строки, вы можете попробовать это вместо этого:

 $arr = preg_split('/(\r\n|[\r\n])/', $textareaInput); 

Он в основном начинается с поиска версии Windows \r\n , и если это не удается, он ищет либо старую версию Mac \r либо версию Unix \n .

Например:

 <?php $text = "Windows\r\n\r\nMac\r\rUnix\n\nDone!"; $arr = preg_split('/(\r\n|[\r\n])/', $text); print_r($arr); ?> 

Печать:

 Array ( [0] => Windows [1] => [2] => Mac [3] => [4] => Unix [5] => [6] => Done! ) 
 $arr = preg_split( "/[\n\r]+/", $textareaInput ); 

Вы можете нормализовать ввод:

 <?php $foo = strtr($foo, array( "\r\n" => "\n", "\r" => "\n", "\n" => "\n", )); ?> 

Кроме того, вы можете взорваться с регулярными выражениями:

 <?php $foo = preg_split ("/[\r\n]+/", $foo); ?> 

Следующий код должен выполнять работу

 <?php $split = preg_split('/[\r\n]+/', $src); foreach ($split as $k=>$string) { $split[$k] = trim($string); if (empty($split[$k])) unset($split[$k]); } ksort($split); $join = implode('', $split); ?> с <?php $split = preg_split('/[\r\n]+/', $src); foreach ($split as $k=>$string) { $split[$k] = trim($string); if (empty($split[$k])) unset($split[$k]); } ksort($split); $join = implode('', $split); ?> 

чтобы получить строку с newlinews полностью лишен. Это не сработает правильно с JS, хотя 🙁