将<br />转换成一个新的文本区域

如果我有一个variables:

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

和一个文本区域:

 <textarea>echo $var1</textarea> 

我怎样才能让文本区域显示一个新的行,而不是像<br />一样显示文本?

编辑:我已经尝试了以下内容:

 <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> 

但是文本区域仍然包含行中的br标签。

试试这个

 <? $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> 

我正在使用以下build设转换回nl2br

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

这里我从$input中replace了\n\r符号,因为nl2br不会删除它们,这会导致\n\n\r<br>输出错误。

@Mobilpadde的答案很好。 但这是我使用preg_replace的正则expression式的解决scheme,根据我的testing可能会更快。

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(); 

结果:

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

这是另一种方法。

 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; } } 

编辑:以前的答案是你想要的东西的倒退。 使用str_replace。 将\ nreplace为\ n

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