str_replace - substr php
Explotar cadena PHP por nueva lĂnea (17)
Simple, ¿verdad? Bueno, esto no está funcionando: - /
$skuList = explode(''/n/r'', $_POST[''skuList'']);
PHP_EOL
se usa ostensiblemente para encontrar el carácter de nueva línea de una manera compatible conPHP_EOL
plataformas, por lo que maneja los 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);
¿Has intentado usar comillas dobles?
¿Perder los saltos de línea de la publicación de los cuadros de texto de entrada?
Lo que me funciona más rápido es copiar y pegar cualquier texto o tipo de tabla Excel o HTML o tipo de línea nueva y pegarlo en un área de texto en lugar de en un cuadro 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];
Coloque el /n
entre comillas dobles:
explode("/n", $_POST[''skuList'']);
En las comillas simples, si no me equivoco, esto se trata como /
y n
separado.
Cubrir 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'']);
En primer lugar, creo que suele ser /r/n
, en segundo lugar, no son los mismos 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 (consulte here ). Es posible que tengas mejor suerte con solo /n
.
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''])));
Muchas cosas aquí:
- Debe usar comillas dobles, no comillas simples, de lo contrario, los caracteres escapados no se escaparán.
- La secuencia normal es
/r/n
, no/n/r
. - Dependiendo de la fuente, puede obtener
/n
sin la/r
(o incluso en casos inusuales, posiblemente solo la/r
)
Dado el último punto, puede encontrar que preg_split()
utilizando todas las variantes posibles le dará una manera más confiable de dividir los datos que explode()
. Pero, alternativamente, puedes usar explode()
con solo /n
luego usar trim()
para eliminar cualquier carácter que quede alrededor.
No es perfecto pero creo que debe ser lo más seguro. Añadir nl2br :
$skuList = explode(''<br />'', nl2br($_POST[''skuList'']));
Para una nueva línea, es solo
$list = explode("/n", $text);
Para una nueva línea y un retorno de carro (como en los archivos de Windows), es como lo ha publicado. ¿Es tu lista un área de texto?
Prueba esto:
explode(PHP_EOF, $lines);
Pruebe "/n/r"
(comillas dobles) o simplemente "/n"
.
Si no está seguro de qué tipo de EOL tiene, ejecute un str_replace antes de su explosión, reemplazando "/ n / r" por "/ n".
Puedes probarlo con regex:
$skuList = explode(''/[/r/n]+/'', $_POST[''skuList'']);
Si alguien más lo intentó pero no funcionó, este es un recordatorio de que es posible que hayas hecho el mismo problema mental que yo.
¿Has escapado mysql de la cuerda 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, simplemente lo adapté y exploté con ''/ n'' (literalmente barra diagonal inversa yn en lugar del carácter de nueva línea real).
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'']);
Mejores prácticas
Como se mencionó en el comentario a la primera respuesta, la mejor práctica es usar la constante PHP PHP_EOL que representa el EOL ( Fin de línea ) del sistema actual.
$skuList = explode(PHP_EOL, $_POST[''skuList'']);
PHP proporciona muchas otras PHP_EOL muy PHP_EOL que puede usar para hacer que su sistema de código sea independiente, vea 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 puede tener problemas al pasar de un sistema a otro cuando utiliza 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 pueden dejar de funcionar. Así que 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 de "Mejores prácticas" 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 (ningún sistema operativo), pero eso (el navegador) es de donde viene la cadena.
Así que, por favor, use la solución de @Alin_Purcaru ( tres abajo ) para cubrir todas sus bases (y aumentar su respuesta):
$skuList = preg_split(''//r/n|/r|/n/'', $_POST[''skuList'']);