Đơn giản phải không? Chà, điều này không hiệu quả: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
không phải là cách khác.
Đơn giản phải không? Chà, điều này không hiệu quả: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
không phải là cách khác.
Câu trả lời:
Thực hành tốt nhất
Như đã đề cập trong bình luận cho câu trả lời đầu tiên, cách tốt nhất là sử dụng hằng số PHP_EOL của PHP đại diện cho EOL của hệ thống hiện tại ( End Of Line ).
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP cung cấp rất nhiều hằng số rất hữu ích khác mà bạn có thể sử dụng để làm cho hệ thống mã của bạn độc lập, xem liên kết này để tìm các hằng thư mục độc lập và hữu ích của hệ thống.
Cảnh báo
Các hằng số này làm cho hệ thống trang của bạn độc lập, nhưng bạn có thể gặp vấn đề khi di chuyển từ hệ thống này sang hệ thống khác khi bạn sử dụng các hằng số với dữ liệu được lưu trữ trên hệ thống khác. Các hằng số của hệ thống mới có thể khác với các hệ thống trước đó và dữ liệu được lưu trữ có thể không hoạt động nữa. Vì vậy, hoàn toàn phân tích dữ liệu của bạn trước khi lưu trữ để loại bỏ bất kỳ phần phụ thuộc hệ thống.
CẬP NHẬT
Nhận xét của Andreas khiến tôi nhận ra rằng giải pháp 'Thực tiễn tốt nhất' mà tôi trình bày ở đây không áp dụng cho trường hợp sử dụng được mô tả: EOL của máy chủ (PHP) không liên quan gì đến EOL mà trình duyệt (mọi hệ điều hành) đang sử dụng, nhưng đó (trình duyệt) là nơi chuỗi đến từ.
Vì vậy, vui lòng sử dụng giải pháp từ @Alin_Purcaru ( ba xuống ) để bao gồm tất cả các cơ sở của bạn (và nêu lên câu trả lời của anh ấy):
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
Bao gồm tất cả các trường hợp. Đừng tin rằng đầu vào của bạn đến từ môi trường Windows.
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
hoặc là
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
\r\n
. Để ngăn chặn điều đó, hoặc là sử dụng: preg_split('/\n|\r/', $_POST['skuList'], -1, PREG_SPLIT_NO_EMPTY);
(lưu ý rằng \r\n
trở nên không cần thiết khi sử dụng lá cờ đó) hoặc đơn giản là đặt \r\n
trước các \r
:preg_split('/\r\n|\n|\r/', $_POST['skuList']);
Hãy thử "\n\r"
(trích dẫn kép) hoặc chỉ "\n"
.
Nếu bạn không chắc chắn mình có loại EOL nào, hãy chạy một chuỗi thông số trước khi phát nổ, thay thế "\ n \ r" bằng "\ n".
/n/r
? Tôi biết OP đã viết nhưng cửa sổ chính xác là\r\n
PHP_EOL
.
explode("\n", str_replace("\r", '', $string));
Rất nhiều thứ ở đây:
\r\n
, không \n\r
.\n
mà không có \r
(hoặc thậm chí trong các trường hợp bất thường, có thể chỉ là \r
)Đưa ra điểm cuối cùng, bạn có thể thấy preg_split()
việc sử dụng tất cả các biến thể có thể sẽ cung cấp cho bạn cách phân chia dữ liệu đáng tin cậy hơn explode()
. Nhưng thay vào đó, bạn có thể sử dụng explode()
chỉ \n
, và sau đó sử dụng trim()
để loại bỏ bất kỳ \r
ký tự nào còn sót lại.
Hàm php này phát nổ chuỗi theo dòng mới
Chú ý : dòng mới trong Windows là \ r \ n và trong Linux và Unix là \ n
hàm này thay đổi tất cả các dòng mới sang chế độ linux rồi tách nó ra.
chú ý rằng các dòng trống sẽ bị bỏ qua
function splitNewLine($text) {
$code=preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$text)));
return explode("\n",$code);
}
thí dụ
$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) );
đầu ra
Array
(
[0] => salam
[1] => man khobam
[2] => to chi
[3] => che khabar
[4] => bashe baba raftam
)
Đối với một dòng mới, nó chỉ là
$list = explode("\n", $text);
Đối với một dòng mới và trả lại vận chuyển (như trong các tệp Windows), đó là như bạn đã đăng. SkuList của bạn là một khu vực văn bản?
Đặt \n
dấu ngoặc kép:
explode("\n", $_POST['skuList']);
Trong các trích dẫn đơn, nếu tôi không nhầm, điều này được coi là \
và n
riêng biệt.
Dễ dàng như nó có vẻ
$skuList = explode('\\n', $_POST['skuList']);
Bạn chỉ cần chuyển văn bản chính xác "\ n" và viết trực tiếp \ n đang được sử dụng làm Chuỗi thoát. Vì vậy, "\\" để vượt qua một dấu gạch chéo ngược đơn giản và sau đó đặt "n"
Trước hết, tôi nghĩ rằng thông thường \r\n
, thứ hai, những thứ đó không giống nhau trên tất cả các hệ thống. Điều đó sẽ chỉ làm việc trên các cửa sổ. Thật khó chịu khi cố gắng tìm ra cách thay thế các dòng mới vì các hệ thống khác nhau đối xử với chúng khác nhau (xem tại đây ). Bạn có thể có may mắn hơn với chỉ \n
.
Nếu bất cứ ai khác đã thử điều này nhưng nó không hoạt động, đây là một lời nhắc nhở rằng bạn có thể đã thực hiện đánh rắm não giống như tôi.
Bạn đã thoát khỏi chuỗi đầu tiên chưa? Trong trường hợp này, ký tự dòng mới không còn là ký tự dòng mới.
Tôi đã không làm bất cứ điều gì để tránh phân tích cú pháp, chỉ cần điều chỉnh và phát nổ bởi '\ n' (nghĩa đen là dấu gạch chéo ngược và n chứ không phải là ký tự dòng mới thực sự.
Mất ngắt dòng từ đăng bài từ hộp văn bản đầu vào?
Điều làm việc nhanh hơn đối với tôi là sao chép dán bất kỳ loại văn bản hoặc loại bảng Excel hoặc HTML hoặc loại dữ liệu mới nào và dán nó vào một văn bản thay vì một hộp văn bản đầu vào: điều này giữ cho các ngắt dòng không bị hỏng trong POST.
<textarea id="txtArea" name="txtArea" rows="40" cols="170"></textarea>
<br>
<input type="submit" value="split lines into array" />
trong mẫu nhận tệp:
$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];
Phương pháp này luôn hiệu quả với tôi:
$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
được sử dụng để tìm ký tự dòng mới theo cách tương thích đa nền tảng, do đó, nó xử lý các vấn đề về DOS / Unix.
Thử cái này:
$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);