2010-10-21 29 views
34

una variable de PHP incluye la siguiente serie:cómo eliminar nuevas líneas y retornos de php string?

<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 lo que la cadena se verá 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 solucionarlo?

+0

Puede encontrar ['s ($ str) -> normalizeLineEndings ('')'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L540) útil, como se encuentra en [esta biblioteca independiente] (https://github.com/delight-im/PHP-Str). Elimina todos los tipos de líneas nuevas, incluidos los caracteres Unicode. – caw

Respuesta

77

Debe colocar el \n entre comillas dobles.
comillas simples dentro de él se trata como 2 caracteres '\' seguido de 'n'

que necesita:

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

Una mejor alternativa es utilizar PHP_EOL como:

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

-1 PHP_EOL no tiene nada que hacer aquí –

+3

@Col: ¿Por qué no? – codaddict

+1

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

14

Tienes que envuelva \n o \r en "", no ''. Al usar comillas simples, las secuencias de escape no serán interpretadas (excepto \' y \\).

The manual states:

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

  • \ n salto de línea (LF o 0x0A (10) en ASCII)

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

  • (...)

+1

Esto es importante. Solía ​​usar comillas simples '' 'y el texto siempre se reemplazaba con' "\ n" '(tipo de cadena). Si confunde con esto, téngalo en cuenta ... – Benyi

4

Esto debe ser como

 
str_replace("\n", '', $str); 
str_replace("\r", '', $str); 
str_replace("\r\n", '', $str); 
0
$no_newlines = str_replace("\r", '', str_replace("\n", '', $str_with_newlines)); 
3

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

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

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 como el parámetro de sustitución de búsqueda es también una buena idea! Prestigio.

+1

Prestado para http://stackoverflow.com/questions/33850820/parse-txt-files-and-turn-them-into-static-html-files/33851340 # 33851340 ¡Gracias! +1 – Steve

1

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' 
     ) 
    ); 
} 
+0

Esto ni siquiera es una respuesta remota a esta pregunta. De hecho, la cosa ** solo ** 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_replace', aunque para fines completamente diferentes. –

+0

Tiene razón, funciona para mí porque uso TextArea y algunas veces necesito una nueva línea y este dato se envía por angular ng-init – Jonathan

0

reemplazar una cadena:

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

u utilizando también les gusta, (% n, % t, todos los caracteres especiales, números, etc ,. Char)

lo que significa cualquier cosa que pueda reemplazar en una cadena.

Cuestiones relacionadas