Basit, değil mi? Bu işe yaramıyor: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\nbunun tersi değildir.
Basit, değil mi? Bu işe yaramıyor: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\nbunun tersi değildir.
Yanıtlar:
En iyi pratik
İlk cevaba yapılan yorumda belirtildiği gibi, en iyi uygulama mevcut sistemin EOL'sini ( Hat Sonu ) temsil eden PHP sabiti PHP_EOL kullanmaktır .
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP, kod sisteminizi bağımsız hale getirmek için kullanabileceğiniz diğer birçok yararlı sabitleri sağlar, kullanışlı ve sistemden bağımsız dizin sabitlerini bulmak için bu bağlantıya bakın .
Uyarı
Bu sabitler sayfa sisteminizi bağımsız hale getirir, ancak sabitleri başka bir sistemde depolanmış verilerle kullandığınızda bir sistemden diğerine geçerken sorun yaşayabilirsiniz. Yeni sistemin sabitleri önceki sisteminkinden farklı olabilir ve depolanan veriler artık çalışmayabilir. Bu nedenle, sisteme bağlı parçaları kaldırmak için verilerinizi saklamadan önce tamamen ayrıştırın.
GÜNCELLEME
Andreas'ın yorumu, burada sunduğum 'En İyi Uygulama' çözümünün açıklanan kullanım durumu için geçerli olmadığını anlamamı sağladı: sunucunun EOL'sinin (PHP) tarayıcının (herhangi bir işletim sisteminin) kullandığı EOL ile hiçbir ilgisi yok, ancak bu (tarayıcı) dizenin geldiği yerdir.
Bu yüzden lütfen tüm üslerinizi kapsamak için @Alin_Purcaru ( üçü aşağı ) çözümü kullanın (ve cevabını yükseltin):
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
Tüm vakaları kapsar. Girişinizin bir Windows ortamından geldiğine güvenmeyin.
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
veya
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
\r\n. Bunu önlemek için, her iki kullanım: preg_split('/\n|\r/', $_POST['skuList'], -1, PREG_SPLIT_NO_EMPTY);(not \r\nveya basitçe O bayrağı kullanırken gereksiz hale gelir) \r\n önce\r :preg_split('/\r\n|\n|\r/', $_POST['skuList']);
Deneyin "\n\r"(çift tırnak) veya sadece "\n".
Hangi EOL türüne sahip olduğunuzdan emin değilseniz, patlamanızdan önce str_replace komutunu çalıştırın ve "\ n \ r" yerine "\ n" yazın.
/n/r? OP yazdı biliyorum ama doğru windows eol olduğunu\r\n
PHP_EOL.
explode("\n", str_replace("\r", '', $string));
Burada bir sürü şey var:
\r\n, değil \n\r.\nolmadan \r(hatta olağandışı durumlarda muhtemelen sadece \r)Son nokta göz önüne alındığında, preg_split()olası tüm varyantları kullanmanın, verileri bölmekten daha güvenilir bir yol sağlayacağını görebilirsiniz explode(). Ancak alternatif explode()olarak sadece ile kullanabilir \nve daha sonra etrafta asılı kalan karakterleri trim()kaldırmak için kullanabilirsiniz \r.
Bu php fonksiyonu ile dize patlayabilir satır
Dikkat : yeni satır Windows'un olan \ r \ n ve Linux ve Unix olduğunu \ n
Bu fonksiyon değişikliği için tüm yeni hat linux moduna sonra ayrıldı.
boş satırların dikkate alınmayacağına dikkat edin
function splitNewLine($text) {
$code=preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$text)));
return explode("\n",$code);
}
misal
$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) );
çıktı
Array
(
[0] => salam
[1] => man khobam
[2] => to chi
[3] => che khabar
[4] => bashe baba raftam
)
Yeni bir çizgi için, sadece
$list = explode("\n", $text);
Yeni bir satır ve satır başı için (Windows dosyalarında olduğu gibi) yayınladığınız gibidir. SkuList'iniz bir metin alanı mı?
Yerleştirin \nçift tırnak:
explode("\n", $_POST['skuList']);
Tek tırnak içinde, eğer yanılmıyorsam, bu ayrı \ve nayrı olarak ele alınır .
Göründüğü kadar kolay
$skuList = explode('\\n', $_POST['skuList']);
Sadece tam metni geçmeleri gerekiyor "\ n" ve yazma n \ bir kaçış dizisine olarak kullanılıyor. Yani "\\" basit bir ters eğik çizgi geçmek ve sonra "n" koymak
Her şeyden önce, sanırım \r\n, ikincisi, bunlar tüm sistemlerde aynı değildir. Bu sadece pencerelerde çalışır. Yeni hatların nasıl değiştirileceğini anlamaya çalışmak biraz sinir bozucu çünkü farklı sistemler onlara farklı davranıyor ( buraya bakın ). Sadece iyi şanslar olabilir \n.
Başka biri bunu denediyse ama işe yaramazsa, bu, I ile aynı beyin osuruğunu yapmış olabileceğinizi hatırlatmaktadır.
Önce mysql dizeden kaçtın mı? Bu durumda, yeni satır karakteri artık yeni satır karakteri değildir.
Ayrıştırmaktan kaçınmak için hiçbir şey yapmadım, sadece '\ n' ile uyarlandı ve patladı ( gerçek satırsonu karakteri yerine ters eğik çizgi ve n) .
Giriş metin kutularından yayın gönderme nedeniyle satır sonları mı kaybediliyor?
Benim için daha hızlı çalışan, herhangi bir metni veya Excel veya HTML tablo türünü veya yeni satır veri türünü kopyalayıp bir girdi metin kutusu yerine bir metin alanına yapıştırmaktır: bu, satır satırlarını POST'ta sağlam tutar.
<textarea id="txtArea" name="txtArea" rows="40" cols="170"></textarea>
<br>
<input type="submit" value="split lines into array" />
form alma dosyasında:
$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];
Bu yöntem her zaman benim için çalışıyor:
$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_EOLGörünüşe göre yeni satır karakterini platformlar arası uyumlu bir şekilde bulmak için kullanılır, bu nedenle DOS / Unix sorunlarını işler.
Bunu dene:
$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);
İşte benim için işe yarayan. PHP 5.6 ve PHP 7.0'da test edilmiştir:
$skuList = str_replace("\\r\\n", "\n", $_POST['skuList']);
$skuList = str_replace("\\n\\r", "\n", $skuList);
$skuList = preg_split("/\n/", $skuList);
print_r($skuList);