2011-05-10 10 views
48

Intentando simplemente reemplazar algunas líneas nuevas. He intentado de 3 maneras diferentes y no recibo ningún cambio:¿Cómo reemplazar r & n con <br/>?

$description = preg_replace('/\r?\n|\r/','<br/>', $description); 
$description = str_replace(array("\r\n","\r","\n"),"<br/>", $description); 
$description = nl2br($description); 

Todo esto debería funcionar, pero aún así recibo las nuevas líneas. Son dobles: "\ r \ r". Eso no debería hacer que ninguno de estos falle ¿no?

+1

¿Por qué tienes desnudas '\ saltos de línea R'? AFAIK incluso MacOSX cambió a '\ n'. – ThiefMaster

+0

Vienen del CSV de un cliente. –

+0

posible duplicado de [Cómo eliminar saltos de línea (sin caracteres) de la cadena?] (Http://stackoverflow.com/questions/10757671/how-to-remove-line-breaks-no-characters-from-the -string) – kenorb

Respuesta

91

Ya existe nl2br() función que reemplazainsertos<br> etiquetas antes de caracteres de nueva línea:

Ejemplo (codepad):

<?php 
// Won't work 
$desc = 'Line one\nline two'; 
// Should work 
$desc2 = "Line one\nline two"; 

echo nl2br($desc); 
echo '<br/>'; 
echo nl2br($desc2); 
?> 

Pero si sigue sin funcionar asegúrese de que el texto $desciption tiene comillas dobles.

Esto se debe a que las comillas simples no 'amplían' las secuencias de escape como \n comparando con las cadenas entre comillas dobles. Presupuesto de documentación de PHP:

Nota: A diferencia de las sintaxis de comillas dobles y heredoc, variables y secuencias de escape para caracteres especiales no serán expandidas cuando ocurren en cadenas entre comillas sencillas.

+0

Ver la línea 3. No está funcionando. –

+0

Mire más de cerca, él OP muestra específicamente que intentaron usar 'nl2br' y que no funcionó. –

+0

Acabo de intentar ejecutar nl2br en una cadena con doble retorno de carro, y funcionó bien. – Decko

-2

Si está utilizando nl2br todas las apariciones de \n y \r será reemplazado por <br>. Pero si (no sé cómo es) sigue recibiendo nuevas líneas puede utilizar

str_replace("\r","",$description); 
str_replace("\n","",$description); 

Para replase nuevas líneas innecesarias por cadena vacía

+0

No se REEMPLAZARON –

+0

'\ r' en' str_replace' parece reemplazar todo. Y además, debe reemplazarlo por '
' ... –

5

nl2br() y cuando tenga que debería funcionar bien:

$description = nl2br($description); 

Es más probable que el ' no abierto en la primera línea de su código de ejemplo esté causando el problema. Retire la 'descripción después ... $

...$description'); 
49

tratar de usar este

$description = preg_replace("/\r\n|\r|\n/",'<br/>',$description); 
+7

una alternativa más rápida podría ser '$ description = str_replace ([" \ r \ n "," \ r "," \ n "],"
", $ descripción) 'tomado de [esta respuesta] (http://stackoverflow.com/a/20717751/2431281) – Keale

+4

(También se podría usar simplemente ['/\ R/'para todos los CR/LF] (https: // nikic .github.io/2011/12/10/PCRE-and-newlines.html) combinaciones linebreak.) – mario

11

Es posible que haya personajes reales "\" en la cadena (las cadenas de comillas simples, como se ha dicho @Robik).

Si está seguro de que las cadenas '\ r' o '\ n' también deben reemplazarse, no estoy hablando de caracteres especiales, sino de una secuencia de dos caracteres '\' y 'r', luego escapar de la '\' en la cadena de reemplazo y funcionará:

str_replace(array("\r\n","\r","\n","\\r","\\n","\\r\\n"),"<br/>",$description); 
0

Esto funcionará con seguridad:

str_replace("\\r","<br />",$description); 
str_replace("\\n","<br />",$description); 
+0

Sugerencia absolutamente incorrecta. "foo \\ r \\ nbar" se convertirá en "foobar" en lugar de "foo
bar". Antes de reemplazar html representa "foo bar". – Artemix

+0

Meh. Funciona para algunos casos específicos donde la entrada es de un formato conocido. – evandentremont

2

nl2br() trabajó para mí, pero necesitaba para envolver variable, con comillas dobles :

Esto funciona:

$description = nl2br("$description"); 

Esto no funciona:

$description = nl2br($description); 
0

Prueba esto:

echo str_replace(array('\r\n','\n\r','\n','\r'), '<br>' , $description); 
+0

Obtenga más información acerca de PHP [strings] (http://php.net/manual/en/language.types.string.php). [''\ r \ n''] (http://php.net/manual/en/language.types.string.php#language.types.string.syntax.single) no es lo mismo que [' "\ r \ n "'] (http://php.net/manual/en/language.types.string.php#language.types.string.syntax.double). – axiac

+0

Gracias @axiac, no tengo tiempo para probar, ¿pero quieres decir que debería ser algo así como '" \ r \ n "' verdad? – l2aelba

Cuestiones relacionadas