Simple, ¿verdad? Bueno, esto no está funcionando: - \
$skuList = explode('\n\r', $_POST['skuList']);
Mejores prácticas
Como se menciona en el comentario a la primera respuesta, la mejor práctica es usar la constante PHP PHP_EOL que representa la EOL ( Fin de línea ) del sistema actual .
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP proporciona muchas otras constantes muy útiles que puede usar para hacer que su sistema de código sea independiente, consulte este enlace para encontrar constantes de directorio útiles e independientes del sistema.
Advertencia
Estas constantes hacen que su sistema de páginas sea independiente, pero podría tener problemas al pasar de un sistema a otro cuando usa las constantes con datos almacenados en otro sistema. Las constantes del nuevo sistema pueden ser diferentes de las del sistema anterior y los datos almacenados podrían dejar de funcionar. Por lo tanto, analice completamente sus datos antes de almacenarlos para eliminar cualquier parte dependiente del sistema.
ACTUALIZAR
El comentario de Andreas me hizo darme cuenta de que la solución 'Best Practice' que presento aquí no se aplica al caso de uso descrito: la EOL (PHP) del servidor no tiene nada que ver con la EOL que usa el navegador (cualquier sistema operativo), pero ese (el navegador) es de donde proviene la cadena.
Entonces, use la solución de @Alin_Purcaru ( tres abajo ) para cubrir todas sus bases (y votar su respuesta):
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
Cubra todos los casos. No confíe en que su entrada proviene de un entorno Windows.
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
o
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
\r\n
. Para evitar eso, tampoco el uso: preg_split('/\n|\r/', $_POST['skuList'], -1, PREG_SPLIT_NO_EMPTY);
(nota que \r\n
se hace innecesaria cuando se utiliza esa bandera) o simplemente poner el \r\n
antes del \r
:preg_split('/\r\n|\n|\r/', $_POST['skuList']);
Prueba "\n\r"
(comillas dobles) o simplemente "\n"
.
Si no está seguro de qué tipo de EOL tiene, ejecute str_replace antes de su explosión, reemplazando "\ n \ r" con "\ n".
/n/r
? Sé que el OP escribió eso, pero el eol de Windows correcto es\r\n
PHP_EOL
.
explode("\n", str_replace("\r", '', $string));
Muchas cosas aquí:
\r\n
, no \n\r
.\n
sin el \r
(o incluso en casos inusuales, posiblemente solo el \r
)Dado el último punto, puede encontrar que el preg_split()
uso de todas las variantes posibles le dará una forma más confiable de dividir los datos que explode()
. Pero, alternativamente, podría usar explode()
con just \n
, y luego usar trim()
para eliminar los \r
caracteres que quedan.
esta función php explota cadena por nueva línea
Atención : la nueva línea en Windows es \ r \ n y en Linux y Unix es \ n
esta función cambia todas las líneas nuevas al modo Linux y luego la divide.
preste atención a que las líneas vacías serán ignoradas
function splitNewLine($text) {
$code=preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$text)));
return explode("\n",$code);
}
ejemplo
$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) );
salida
Array
(
[0] => salam
[1] => man khobam
[2] => to chi
[3] => che khabar
[4] => bashe baba raftam
)
tratar
explode(chr(10), $_POST['skuList']);
Para una nueva línea, es solo
$list = explode("\n", $text);
Para una nueva línea y retorno de carro (como en los archivos de Windows), es como lo publicó. ¿Es su skuList un área de texto?
Coloque las \n
comillas dobles:
explode("\n", $_POST['skuList']);
Entre comillas simples, si no me equivoco, esto se trata como \
y por n
separado.
¿Has intentado usar comillas dobles?
Prueba esto:
explode(PHP_EOF, $lines);
Tan fácil como parece
$skuList = explode('\\n', $_POST['skuList']);
Solo necesita pasar el texto exacto "\ n" y escribir \ n directamente se está utilizando como una secuencia de escape. Entonces "\\" para pasar una simple barra hacia atrás y luego poner "n"
En primer lugar, creo que generalmente \r\n
, en segundo lugar, no son iguales en todos los sistemas. Eso solo funcionará en Windows. Es un poco molesto tratar de descubrir cómo reemplazar nuevas líneas porque los diferentes sistemas las tratan de manera diferente (ver aquí ). Puede que tengas mejor suerte con solo \n
.
Si alguien más intentó esto pero no funcionó, este es un recordatorio de que podría haber hecho el mismo pedo cerebral que yo.
¿Has escapado mysql de la cadena primero? En este caso, el carácter de nueva línea ya no es un carácter de nueva línea.
No hice nada para evitar analizarlo, solo lo adapté y exploté con '\ n' (literalmente barra invertida yn en lugar del carácter real de nueva línea.
¿Saltos de línea perdidos por publicar desde cuadros de texto de entrada?
Lo que funciona más rápido para mí es copiar y pegar cualquier texto o tipo de tabla de Excel o HTML o tipo de datos de nueva línea y pegarlo en un área de texto en lugar de un cuadro de texto de entrada: esto mantiene intactos los saltos de línea en la POST.
<textarea id="txtArea" name="txtArea" rows="40" cols="170"></textarea>
<br>
<input type="submit" value="split lines into array" />
en el formulario que recibe el archivo:
$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];
Este método siempre funciona para mí:
$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
se usa aparentemente para encontrar el carácter de nueva línea de una manera compatible con plataformas cruzadas, por lo que maneja problemas de DOS / Unix.
Prueba esto:
$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);
Puedes probarlo con regex:
$skuList = explode('/[\r\n]+/', $_POST['skuList']);
Esto es lo que funcionó para mí. Probado en PHP 5.6 y 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);
\r\n
no son al revés.