una str_replace parte eliminar cortar caracteres cadena php

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 con PHP_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'']);