Просте, правда? Ну, це не працює: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\nне навпаки.
Просте, правда? Ну, це не працює: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\nне навпаки.
Відповіді:
Найкраща практика
Як згадується в коментарі до першої відповіді, найкращою практикою є використання константи PHP PHP_EOL, яка представляє EOL поточної системи ( End Of Line ).
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP надає безліч інших дуже корисних констант , за допомогою яких можна зробити систему коду незалежною, перейдіть за цим посиланням, щоб знайти корисні та системні незалежні константи каталогів.
Увага
Ці константи роблять вашу сторінку сторінки незалежною, але у вас можуть виникнути проблеми при переході від однієї системи до іншої, коли ви використовуєте константи з даними, що зберігаються в іншій системі. Константи нової системи можуть відрізнятися від попередніх, і збережені дані можуть більше не працювати. Тому повністю проаналізуйте свої дані, перш ніж зберігати їх, щоб видалити будь-які компоненти, що залежать від системи.
ОНОВЛЕННЯ
У коментарі Андреаса я зрозумів, що рішення "Best Practice", яке я тут представляю, не стосується описаного випадку використання: EOL (PHP) сервера не має нічого спільного з EOL, який використовує браузер (будь-яка ОС), але це (браузер), звідки походить рядок.
Тому, будь ласка, використовуйте рішення від @Alin_Purcaru ( три вниз ), щоб охопити всі ваші бази (і підтвердити його відповідь):
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
Покрийте всі справи. Не сподівайтеся, що ваш внесок надходить із середовища Windows.
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
або
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
\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? Я знаю, що ОП написала це, але правильний windows eol є\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 , є \ г \ п і в Linux і Unix є \ п
це зміна функції все нові рядки в 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
)
Для нового рядка це просто
$list = explode("\n", $text);
Для нового рядка та повернення каретки (як у файлах Windows), це так, як ви опублікували. Ваш skuList - це область тексту?
Розмістіть \nподвійні лапки:
explode("\n", $_POST['skuList']);
В одинарних лапках, якщо я не помиляюся, це трактується як \і nокремо.
Так просто, як здається
$skuList = explode('\\n', $_POST['skuList']);
Вам просто потрібно передати точний текст "\ n", а запис \ n безпосередньо використовується як послідовність втечі. Тож "\\" пропустити просту рису назад і поставити "n"
По-перше, я думаю, що зазвичай це \r\n, по-друге, це не однаково у всіх системах. Це буде працювати тільки на вікнах. Це щось набридливо намагатися розібратися, як замінити нові лінії, тому що різні системи трактують їх по-різному (див. Тут ). Можливо, вам пощастить просто \n.
Якщо хтось інший спробував це, але це не спрацювало, це нагадування, що ви, можливо, зробили той самий мозок, як я.
У вас мійскл першим уникнув рядок? У цьому випадку символ нового рядка вже не є символом нового рядка.
Я нічого не зробив, щоб уникнути його розбору, просто адаптований та вибухнутий символом '\ 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'])));
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);