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