2011-05-14 23 views
31

Si tengo una variable:conversión de <br /> en una nueva línea para su uso en un área de texto

$var1 = "Line 1 info blah blah <br /> Line 2 info blah blah"; 

Y un área de texto:

<textarea>echo $var1</textarea> 

¿Cómo puedo obtener el área de texto para mostrar una nueva línea en lugar de mostrar el texto en una sola como con un <br /> en él?

Editar: he intentado lo siguiente:

<textarea class="hobbieTalk" id="hobbieTalk" name="hobbieTalk" cols="35" rows="5" onchange="contentHandler('userInterests',this.id,this.value,0)"><?php 

$convert=$_SESSION["hobbieTalk"]; 
$convert = str_replace("<br />", "\n", $convert); 
echo $convert; 

?></textarea> 

Sin embargo, el área de texto contiene todavía los br etiquetas en las líneas.

+0

[Encontré esta respuesta para ser útil.] (Https://stackoverflow.com/questions/2494754/opposite-of-nl2br-is-it-str-replace) No parecía coincidir con ninguno de las respuestas de arriba. – digifrog

Respuesta

63

prueba este

<? 
    $text = "Hello <br /> Hello again <br> Hello again again <br/> Goodbye <BR>"; 
    $breaks = array("<br />","<br>","<br/>"); 
    $text = str_ireplace($breaks, "\r\n", $text); 
?> 
<textarea><? echo $text; ?></textarea> 
+8

gracias a todos: tenga en cuenta si almacena esta cadena en su base de datos usando etiquetas html convertidas debe poner: $ breaks = array ("
", "
", "", "
", "< br/> "," < br/> "," <br> "); aplaude a todos – someguy

+0

$ text = str_ireplace ($ breaks, "", $ text); funcionó mejor para mí! :-) – bestprogrammerintheworld

+0

@bestprogrammerintheworld para este $ text = str_ireplace ($ breaks, "", $ text); tu puedes usar 'strip_tags ($ text)' – Naumov

0

EDITAR: la respuesta anterior fue al revés de lo que quería. Use str_replace. reemplazar <br> con \ n

echo str_replace('<br>', "\n", $var1); 
+2

Hace lo contrario, convierte todos los nuevos caracteres de línea en etiquetas br. –

0
<?php 

$var1 = "Line 1 info blah blah <br /> Line 2 info blah blah"; 
$var1 = str_replace("<br />", "\n", $var1); 

?> 

<textarea><?php echo $var1; ?></textarea> 
+0

str_replace ("
", "\ n", $ var1) - falla aún produjo
salidas – someguy

+0

¿Está estableciendo $ var1 igual a? Entonces: $ var1 = str_replace ("
", "\ n", $ var1); –

+0

Tiene un error en su ejemplo. Ver: http://codepad.org/wUL6BJBb –

1

Aquí es otro enfoque.

class orbisius_custom_string { 
    /** 
    * The reverse of nl2br. Handles <br/> <br/> <br /> 
    * usage: orbisius_custom_string::br2nl('Your buffer goes here ...'); 
    * @param str $buff 
    * @return str 
    * @author Slavi Marinov | http://orbisius.com 
    */ 
    public static function br2nl($buff = '') { 
     $buff = preg_replace('#<br[/\s]*>#si', "\n", $buff); 
     $buff = trim($buff); 

     return $buff; 
    } 
} 
2

La respuesta de @Mobilpadde es agradable. Pero esta es mi solución con expresiones regulares que usa preg_replace que podría ser más rápido según mis pruebas.

echo preg_replace('/<br\s?\/?>/i', "\r\n", "testing<br/><br /><BR><br>");

function function_one() { 
    preg_replace('/<br\s?\/?>/i', "\r\n", "testing<br/><br /><BR><br>"); 
} 

function function_two() { 
    str_ireplace(['<br />','<br>','<br/>'], "\r\n", "testing<br/><br /><BR><br>"); 
} 

function benchmark() { 
    $count = 10000000; 
    $before = microtime(true); 

    for ($i=0 ; $i<$count; $i++) { 
     function_one(); 
    } 

    $after = microtime(true); 
    echo ($after-$before)/$i . " sec/function one\n"; 



    $before = microtime(true); 

    for ($i=0 ; $i<$count; $i++) { 
     function_two(); 
    } 

    $after = microtime(true); 
    echo ($after-$before)/$i . " sec/function two\n"; 
} 
benchmark(); 

Resultados:

1.1471637010574E-6 sec/function one (preg_replace) 
1.6027762889862E-6 sec/function two (str_ireplace) 
8

Estoy acostumbrado después de la construcción para convertir de nuevo nl2br

function br2nl($input) { 
    return preg_replace('/<br\s?\/?>/ius', "\n", str_replace("\n","",str_replace("\r","", htmlspecialchars_decode($input)))); 
} 

aquí Substituí \n y \r símbolos de entrada de $ porque dosen nl2br 't eliminarlos y esto causa una salida incorrecta con \n\n o \r<br>.

Cuestiones relacionadas