Proste, prawda? Cóż, to nie działa: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
nie są na odwrót.
Proste, prawda? Cóż, to nie działa: - \
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
nie są na odwrót.
Odpowiedzi:
Najlepsze praktyki
Jak wspomniano w komentarzu do pierwszej odpowiedzi, najlepszą praktyką jest stosowanie stałej PHP_EOL PHP, która reprezentuje EOL obecnego systemu ( End Of Line ).
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP zapewnia wiele innych bardzo przydatnych stałych , których można użyć do uniezależnienia systemu kodu. Zobacz ten link, aby znaleźć przydatne i niezależne od systemu stałe katalogów.
Ostrzeżenie
Stałe te uniezależniają system stron, ale możesz napotkać problemy podczas przenoszenia z jednego systemu do drugiego, gdy używasz stałych z danymi przechowywanymi w innym systemie. Stałe nowego systemu mogą się różnić od poprzednich, a przechowywane dane mogą już nie działać. Więc całkowicie przeanalizuj swoje dane przed zapisaniem, aby usunąć części zależne od systemu.
AKTUALIZACJA
Komentarz Andreasa uświadomił mi, że przedstawione tutaj rozwiązanie „najlepszych praktyk” nie ma zastosowania do opisanego przypadku użycia: EOL serwera (PHP) nie ma nic wspólnego z EOL, którego używa przeglądarka (dowolny system operacyjny), ale to (przeglądarka) pochodzi z łańcucha.
Więc skorzystaj z rozwiązania @Alin_Purcaru ( trzy w dół ), aby objąć wszystkie swoje bazy (i głosuj na jego odpowiedź):
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
Obejmują wszystkie sprawy. Nie polegaj, że dane wejściowe pochodzą ze środowiska Windows.
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
lub
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
\r\n
. Aby temu zapobiec, należy użyć: preg_split('/\n|\r/', $_POST['skuList'], -1, PREG_SPLIT_NO_EMPTY);
(uwaga, że \r\n
staje się zbędne przy użyciu tej flagi) lub po prostu umieścić \r\n
przed tym \r
:preg_split('/\r\n|\n|\r/', $_POST['skuList']);
Spróbuj "\n\r"
(podwójne cudzysłowy) lub po prostu "\n"
.
Jeśli nie masz pewności, jaki typ EOL posiadasz, uruchom komendę str_replace przed wybuchem, zamieniając „\ n \ r” na „\ n”.
/n/r
? Wiem, że OP napisał to, ale poprawny eol systemu Windows to\r\n
PHP_EOL
.
explode("\n", str_replace("\r", '', $string));
Wiele rzeczy tutaj:
\r\n
nie jest \n\r
.\n
bez \r
(lub nawet w nietypowych przypadkach, być może tylko \r
)Biorąc pod uwagę ostatni punkt, może okazać się, że preg_split()
użycie wszystkich możliwych wariantów da ci bardziej niezawodny sposób podziału danych niż explode()
. Ale alternatywnie możesz użyć explode()
just \n
, a następnie użyć, trim()
aby usunąć wszelkie \r
postacie, które pozostały w pobliżu.
Ta funkcja php wybuchnąć ciąg przez nowego wiersza
Uwaga : Nowa linia w systemie Windows jest \ r \ n oraz Linux i Unix jest \ n
zmiana ta funkcja wszystkie nowe linie do linux trybie następnie podzielić ją.
zwróć uwagę, że puste linie będą ignorowane
function splitNewLine($text) {
$code=preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$text)));
return explode("\n",$code);
}
przykład
$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) );
wynik
Array
(
[0] => salam
[1] => man khobam
[2] => to chi
[3] => che khabar
[4] => bashe baba raftam
)
W przypadku nowej linii jest po prostu
$list = explode("\n", $text);
W przypadku nowej linii i powrotu karetki (jak w plikach Windows) jest tak, jak napisałeś. Czy twoja lista jest obszarem tekstowym?
Umieść \n
w podwójnych cudzysłowach:
explode("\n", $_POST['skuList']);
W pojedynczych cudzysłowach, jeśli się nie mylę, to jest traktowany jak \
i n
oddzielnie.
Tak proste, jak się wydaje
$skuList = explode('\\n', $_POST['skuList']);
Musisz tylko podać dokładny tekst „\ n”, a bezpośrednie pisanie \ n jest używane jako Sekwencja Escape. Więc „\\”, aby przekazać prosty ukośnik, a następnie wpisz „n”
Po pierwsze, myślę, że zwykle po \r\n
drugie, nie są takie same na wszystkich systemach. Działa to tylko w systemie Windows. To trochę irytujące, próbując wymyślić, jak zastąpić nowe linie, ponieważ różne systemy traktują je inaczej (patrz tutaj ). Możesz mieć więcej szczęścia \n
.
Jeśli ktokolwiek próbował, ale to nie działało, jest to przypomnienie, że mogłeś zrobić ten sam pierdnięcie mózgu jak ja.
Czy mysql najpierw uniknął łańcucha? W tym przypadku znak nowej linii nie jest już znakiem nowej linii.
Nie zrobiłem nic, aby uniknąć parsowania, po prostu dostosowałem i eksplodowałem przez „\ n” (dosłownie odwrotny ukośnik i n , niż faktyczny znak nowej linii.
Tracisz przerwy w liniach od wysyłania z wejściowych pól tekstowych?
Dla mnie szybsze jest kopiowanie wklejania dowolnego tekstu, tabeli Excela lub HTML lub typu danych nowej linii i wklejanie go do obszaru tekstowego zamiast pola tekstowego wejściowego: dzięki temu łamanie wierszy pozostanie nienaruszone w POST.
<textarea id="txtArea" name="txtArea" rows="40" cols="170"></textarea>
<br>
<input type="submit" value="split lines into array" />
w formularzu odbierającym plik:
$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];
Ta metoda zawsze działa dla mnie:
$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
jest rzekomo używany do znalezienia znaku nowej linii w sposób kompatybilny z wieloma platformami, więc obsługuje problemy DOS / Unix.
Spróbuj tego:
$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);
Oto, co zadziałało dla mnie. Testowane w PHP 5.6 oraz 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);