Я использовал функцию explode для получения содержимого textarea в массиве на основе строки. Когда я запускаю этот код в своем localhost (WAMPserver 2.1), он отлично работает с этим кодом:
$arr=explode("\r\n",$getdata);
Когда я загружаю на свой Linux-сервер, мне нужно каждый раз менять код выше:
$arr=explode("\n",$getdata);
Каким будет постоянное решение для меня. Какой общий код будет работать для меня для обоих серверов?
спасибо
Постоянный PHP_EOL содержит зависящий от платформы перевод строки, поэтому вы можете попробовать следующее:
$arr = explode(PHP_EOL, $getdata);
Но еще лучше – нормализовать текст, потому что вы никогда не знаете, какую ОС используют ваши посетители. Это один из способов нормализовать использование только \ n в качестве перевода строки (но также см. Ответ Алекса, поскольку его регулярное выражение будет обрабатывать все типы строк):
$getdata = str_replace("\r\n", "\n", $getdata); $arr = explode("\n", $getdata);
Насколько я знаю, лучший способ разбить строку на новые строки – preg_split
и \R
:
preg_split('~\R~', $str);
\R
соответствует любой последовательности Unicode Newline Sequence, то есть не только LF
, CR
, CRLF
, но и более экзотическим, таким как VT
, FF
, NEL
, LS
и PS
.
Если это поведение не требуется (почему?), Вы можете указать опцию BSR_ANYCRLF
:
preg_split('~(*BSR_ANYCRLF)\R~', $str);
Это будет соответствовать только «классическим» последовательностям новой строки.
Наилучшим образом, наилучшим подходом было бы нормализовать ваши входные данные, чтобы просто использовать \n
, например:
$input = preg_replace('~\r[\n]?~', "\n", $input);
Поскольку:
\n
. \r\n
. \r
. Тем не менее, взлёт \n
должен получить наилучшие результаты (если вы не нормализуете).
Константа PHP_EOL содержит последовательность символов новой строки операционной системы хоста.
$arr=explode(PHP_EOL,$getdata);
Вы можете использовать preg_split()
который позволит ему работать независимо:
$arr = preg_split('/\r?\n/', $getdata);