una txt saltos salto quitar linea eregi_replace eliminar caracteres cadena php html replace line-breaks nl2br

php - txt - Cómo eliminar saltos de línea(sin caracteres) de la cadena



eregi_replace (9)

Esto podría parecer un engaño, pero puede estar seguro de que no lo es - He buscado tanto en SO como en el resto de la web para encontrar una respuesta a mi problema y terminé encontrando las mismas "soluciones" insuficientes una y otra vez. De todos modos, aquí va:

Estoy guardando la entrada del usuario desde un área de texto a una base de datos MySQL (dentro de un entorno de WordPress, pero creo que no debería importar este problema). Posteriormente se recupera de la base de datos para mostrarse a los administradores en el back-end del sitio. El problema se produce cuando los usuarios envían texto con saltos de línea (es decir, presionan la tecla Intro).

Una cadena de muestra puede verse así:

Dear friends, I just wanted so Hello. How are you guys? I''m fine, thanks! Greetings, Bill

No hay caracteres de final de línea ("/ n", "/ r" o similares) en la cadena.

Estoy usando nl2br() para generar resultados HTML, pero eso no es suficiente. El resultado es:

Dear friends, I just wanted so Hello. How are you guys? I''m fine, thanks!<br /> <br /> Greetings,<br /> Bill

Que, por lo que yo entiendo, es el resultado nl2br() esperado, ya que eso inserta las etiquetas y no se supone que reemplacen los saltos de línea en primer lugar.

Sin embargo, el formato que necesito sería este:

Dear friends, I just wanted so Hello. How are you guys? I''m fine, thanks!<br /><br />Greetings,<br />Bill

Si la cadena tuviera caracteres EOL como "/ n" en ella, la golpearía con str_replace() o preg_replace() y terminaría con ella, pero no tengo idea de qué aguja alimentar a ninguna de esas funciones si hubiera alguna. no hay personajes allí en primer lugar.

Puedo acceder manualmente al campo correspondiente en la base de datos, presionar Retroceso para cada salto de línea y lo que más adelante quiero hacer con la cadena funciona. Entonces sé que necesito el formato anterior.


Algo un poco más funcional (fácil de usar en cualquier lugar):

function strip_carriage_returns($string) { return str_replace(array("/n/r", "/n", "/r"), '''', $string); }

¡Usar PHP_EOL como el parámetro de reemplazo de búsqueda también es una buena idea! Prestigio.



Debería poder reemplazarlo con un preg que elimine todas las nuevas líneas y retornos de carro. El código es:

preg_replace( "//r|/n/", "", $yourString );

Aunque los caracteres /n no aparecen, si obtiene retornos de carro, hay un carácter invisible allí. El reemplazo de preg debería capturar y reparar esos.


Es porque nl2br() no elimina nuevas líneas.

Devuelve la cadena con <br /> o el elemento insertado antes de todas las líneas nuevas ( /r/n , /n/r , /n y /r ).

Use str_replace lugar:

$string = str_replace(array("/r/n", "/r", "/n"), "<br />", $string);


Para funcionar correctamente también en Windows, sugiero usar

$buffer = str_replace(array("/r/n", "/r", "/n"), "", $buffer);

"/r/n" - para Windows, "/r" - para Mac y "/n" - para Linux


También puedes usar PHP trim

Esta función devuelve una cadena con espacios en blanco despojados del principio y el final de str. Sin el segundo parámetro, trim () eliminará estos caracteres:

  • "" (ASCII 32 (0x20)), un espacio ordinario.
  • "/ t" (ASCII 9 (0x09)), una pestaña.
  • "/ n" (ASCII 10 (0x0A)), una nueva línea (avance de línea).
  • "/ r" (ASCII 13 (0x0D)), un retorno de carro.
  • "/ 0" (ASCII 0 (0x00)), el NUL-byte.
  • "/ x0B" (ASCII 11 (0x0B)), una pestaña vertical.

str_replace (PHP_EOL, null, $ str);


La solución de Ben es aceptable, pero str_replace() es mucho más rápido que preg_replace()

$buffer = str_replace(array("/r", "/n"), '''', $buffer);

Al usar menos potencia de CPU, se reducen las emisiones mundiales de dióxido de carbono.


$str = " Dear friends, I just wanted so Hello. How are you guys? I''m fine, thanks!<br /> <br /> Greetings,<br /> Bill"; echo str_replace(array("/n", "/r"), '''', $str); // echo $str in a single line