¿Cómo eliminar nuevas líneas y retornos de la cadena php?

4 minutos de lectura

avatar de usuario
yenes

Una variable php contiene la siguiente cadena:

<p>text</p>
<p>text2</p>
<ul>
<li>item1</li>
<li>item2</li>
</ul>

Quiero eliminar todos los caracteres de nueva línea en esta cadena para que se vea así:

<p>text</p><p>text2><ul><li>item1</li><li>item2</li></ul>

He intentado lo siguiente sin éxito:

str_replace('\n', '', $str);
str_replace('\r', '', $str);
str_replace('\r\n\', '', $str);

¿Alguien sabe cómo arreglar esto?

avatar de usuario
coadicto

Necesitas colocar el \n entre comillas dobles.
Dentro de comillas simples se trata como 2 caracteres '\' seguido por 'n'

Necesitas:

$str = str_replace("\n", '', $str);

Una mejor alternativa es usar PHP_EOL como:

$str = str_replace(PHP_EOL, '', $str);

  • PHP_EOL de hecho no funciona. PHP no los encontrará correctamente en str_replace. Tengo que hacer esto para una visualización html correcta: reemplace \r\n con
    (esto es para CRLF en Windows), luego reemplace \n con
    (esto es para LF en Linux), por último, reemplace \r con cadena vacía (esto no debería significar nada)

    – Scott Chu

    9 de julio de 2015 a las 9:39


  • Por cierto, PHP_EOL No funciona. Debiera ser ["\r\n", "\r", "\n"] en cambio.

    – Matt K.

    1 de febrero de 2017 a las 22:14


  • ¿Realmente necesitas el "\r\n" en ["\r\n", "\r", "\n"]? Ya se va a eliminar globalmente \r y \n` en todas partes, ¿verdad?

    -James M. Lay

    10 de diciembre de 2017 a las 0:28

  • FWIW, en PHP 7 pude usar $str = str_replace(PHP_EOL, '', $str); y funcionó con éxito.

    – JustCarty

    11 de diciembre de 2017 a las 11:12

  • @JustCarty Eso podría haber funcionado en su caso específico, pero asume que el valor de $str se creó en la misma plataforma que el sistema que ejecuta el script. Si mezcla Windows y Unix, tendrá un mal día.

    – musicin3d

    16/03/2018 a las 21:59


avatar de usuario
kapá

tienes que envolver \n o \r en ""no ''. Cuando se utilizan comillas simples, las secuencias de escape no se interpretarán (excepto \' y \\).

El manual dice:

Si la cadena está entre comillas dobles (“), PHP interpretará más secuencias de escape para caracteres especiales:

  • \norte avance de línea (LF o 0x0A (10) en ASCII)

  • \r retorno de carro (CR o 0x0D (13) en ASCII)\

  • (…)

  • Esto es importante. Solía ​​​​usar comillas simples ' y el texto siempre se reemplaza con "\n"(tipo de cadena). Si te confundes con esto, tenlo en cuenta….

    – Benyi

    4 mayo 2017 a las 17:53


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

function replace_carriage_return($replace, $string)
{
    return str_replace(array("\n\r", "\n", "\r"), $replace, $string);
}

Usando PHP_EOL ya que el parámetro de reemplazo de búsqueda también es una buena idea. Prestigio.

  • Tomado prestado de stackoverflow.com/questions/33850820/… ¡Gracias! +1

    –Steve

    22 de noviembre de 2015 a las 16:04

avatar de usuario
asif mulla

esto debería ser como

str_replace("\n", '', $str);
str_replace("\r", '', $str);
str_replace("\r\n", '', $str);

Para eliminar nuevas líneas de la cadena, siga el siguiente código

$newstring = preg_replace("/[\n\r]/","",$subject); 

  • funciona muy bien en laravel para eliminar la nueva línea de la descripción del producto.

    – calin24

    15 mayo 2018 a las 11:21

avatar de usuario
rvandoni

puede pasar una matriz de cadenas a str_replacepor lo que puede hacer todo en una sola declaración:

$content = str_replace(["\r\n", "\n", "\r"], "", $content);

  • funciona muy bien en laravel para eliminar la nueva línea de la descripción del producto.

    – calin24

    15 mayo 2018 a las 11:21

avatar de usuario
jonathan

Salida correcta:

'{"data":[{"id":"1","reason":"hello\\nworld"},{"id":"2","reason":"it\\nworks"}]}'

function json_entities( $data = null )
{           
    //stripslashes
    return str_replace( '\n',"\\"."\\n",
        htmlentities(
            utf8_encode( json_encode( $data)  ) , 
            ENT_QUOTES | ENT_IGNORE, 'UTF-8' 
        )
    );
}

  • Esto no es ni remotamente una respuesta a esta pregunta. De hecho, el solamente Lo que la pregunta y la respuesta tienen en común es el carácter de nueva línea ‘\n’ literal y el uso de str_replaceaunque con propósitos completamente diferentes.

    –Michael Gaskill

    28 de junio de 2016 a las 1:50

  • Tienes una razón, funciona para mí porque uso TextArea y, a veces, necesito una nueva línea y estos datos se envían mediante angular ng-init

    – Jonathan

    7 julio 2016 a las 18:07

¿Ha sido útil esta solución?