Sederhana bukan? Nah, ini tidak berfungsi: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\ntidak sebaliknya.
Sederhana bukan? Nah, ini tidak berfungsi: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\ntidak sebaliknya.
Jawaban:
Praktek terbaik
Seperti disebutkan dalam komentar pada jawaban pertama, praktik terbaik adalah dengan menggunakan konstanta PHP PHP_EOL yang mewakili EOL sistem saat ini ( End Of Line ).
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP menyediakan banyak konstanta lain yang sangat berguna yang dapat Anda gunakan untuk membuat sistem kode Anda independen, lihat tautan ini untuk menemukan konstanta direktori yang berguna dan independen sistem.
Peringatan
Konstanta ini membuat sistem halaman Anda independen, tetapi Anda mungkin mengalami masalah ketika berpindah dari satu sistem ke sistem lainnya ketika Anda menggunakan konstanta dengan data yang disimpan di sistem lain. Konstanta sistem baru mungkin berbeda dari sistem sebelumnya dan data yang disimpan mungkin tidak berfungsi lagi. Jadi parsing data Anda sepenuhnya sebelum menyimpannya untuk menghapus bagian-bagian yang bergantung pada sistem.
MEMPERBARUI
Komentar Andreas membuat saya menyadari bahwa solusi 'Praktik Terbaik' yang saya sajikan di sini tidak berlaku untuk kasus penggunaan yang dijelaskan: EOL server (PHP) tidak ada hubungannya dengan EOL yang digunakan browser (OS apa pun), tapi itu (browser) adalah asal dari string.
Jadi, silakan gunakan solusi dari @Alin_Purcaru ( three down ) untuk mencakup semua pangkalan Anda (dan pilih jawabannya):
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
Tutupi semua case. Jangan mengandalkan bahwa input Anda berasal dari lingkungan Windows.
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
atau
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
\r\n. Untuk mencegah hal itu, baik menggunakan: preg_split('/\n|\r/', $_POST['skuList'], -1, PREG_SPLIT_NO_EMPTY);(catatan bahwa \r\nmenjadi tidak perlu bila menggunakan bendera itu) atau hanya menempatkan \r\n sebelum itu \r:preg_split('/\r\n|\n|\r/', $_POST['skuList']);
Coba "\n\r"(tanda kutip ganda) atau adil "\n".
Jika Anda tidak yakin jenis EOL yang Anda miliki, jalankan str_replace sebelum meledak, ganti "\ n \ r" dengan "\ n".
/n/r? Saya tahu OP menulis itu tetapi windows eol yang benar adalah\r\n
PHP_EOL.
explode("\n", str_replace("\r", '', $string));
Banyak hal di sini:
\r\n, bukan \n\r.\ntanpa \r(atau bahkan dalam kasus yang tidak biasa, mungkin hanya \r)Mengingat poin terakhir, Anda mungkin menemukan preg_split()menggunakan semua varian yang mungkin akan memberi Anda cara yang lebih dapat diandalkan untuk memisahkan data daripada explode(). Tapi Anda juga bisa menggunakan explode()dengan adil \n, dan kemudian gunakan trim()untuk menghapus \rkarakter apa pun yang tertinggal.
fungsi php ini meledak string oleh baris baru
Perhatian : baris baru di Windows adalah \ r \ n dan di Linux dan Unix adalah \ n
fungsi ini mengubah semua baris baru ke mode linux kemudian membaginya.
perhatikan bahwa baris kosong akan diabaikan
function splitNewLine($text) {
$code=preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$text)));
return explode("\n",$code);
}
contoh
$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) );
keluaran
Array
(
[0] => salam
[1] => man khobam
[2] => to chi
[3] => che khabar
[4] => bashe baba raftam
)
Untuk jalur baru, hanya saja
$list = explode("\n", $text);
Untuk baris baru dan carriage return (seperti dalam file Windows), itu seperti yang Anda posting. Apakah skuList Anda merupakan area teks?
Tempatkan \ntanda kutip ganda:
explode("\n", $_POST['skuList']);
Dalam tanda kutip tunggal, jika saya tidak salah, ini diperlakukan sebagai \dan nsecara terpisah.
Semudah kelihatannya
$skuList = explode('\\n', $_POST['skuList']);
Anda hanya perlu memberikan teks yang tepat "\ n" dan menulis \ n secara langsung digunakan sebagai Escape Sequence. Jadi "\\" untuk melewati garis miring sederhana dan kemudian meletakkan "n"
Pertama-tama, saya pikir biasanya \r\n, yang kedua, itu tidak sama pada semua sistem. Itu hanya akan bekerja di windows. Agak menyebalkan mencoba mencari cara mengganti saluran baru karena sistem yang berbeda memperlakukannya secara berbeda (lihat di sini ). Anda mungkin lebih beruntung dengan adil \n.
Jika orang lain mencoba ini tetapi tidak berhasil, ini adalah pengingat bahwa Anda mungkin telah melakukan kentut otak yang sama dengan saya.
Apakah Anda mysql lolos dari string pertama? Dalam hal ini karakter baris baru tidak lagi menjadi karakter baris baru.
Saya tidak melakukan apa pun untuk menghindari menguraikannya, hanya diadaptasi dan meledak oleh '\ n' (secara harfiah garis miring terbalik dan n daripada karakter baris baru yang sebenarnya.
Kehilangan jeda dari posting dari kotak teks input?
Apa yang bekerja lebih cepat bagi saya adalah menyalin rekatkan teks atau Excel atau jenis tabel HTML atau tipe baris baru data dan rekatkan ke dalam textarea alih-alih inputextbox: ini menjaga linebreaks tetap utuh dalam POST.
<textarea id="txtArea" name="txtArea" rows="40" cols="170"></textarea>
<br>
<input type="submit" value="split lines into array" />
dalam bentuk menerima file:
$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];
Metode ini selalu berhasil untuk saya:
$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_EOLseolah-olah digunakan untuk menemukan karakter baris baru dengan cara yang kompatibel lintas platform, sehingga menangani masalah DOS / Unix.
Coba ini:
$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);
Inilah yang bekerja untuk saya. Diuji dalam PHP 5.6 dan juga 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);