繁体   English   中英

文本区域,nl2br,线条丰富

[英]Text Area, nl2br, line breaks galore

我有一个textarea,用户输入文本( 返回任意数量),然后我将该值,插入数据库,然后用数据库中的值更新textarea的值。

<textarea maxlength="500" cols="110" name="description" rows="15"><?php if(isset($newDesc)) echo snl2br_lose(nl2br($newDesc)); else echo nl2br_lose(nl2br($user->desc));?></textarea>

是我的HTML。 我遇到的问题是,在提交值并将其插入数据库工作时,它会在填充textarea的值时将换行量增加一倍。 所以,如果他们打字

换线 Foobar

它将使textarea的价值

线断线 Foobar的突破

function nl2br_lose($string) { 
     return str_replace('<br/>', '&#013;', str_replace('<br />', '&#013;',str_replace('<br>', '&#013;',str_replace('<br >', '&#013;',$string)))); 
 } 

是我用来将nl2br变成textarea“返回”的函数。 但是,如果我从返回中取出nl2br_lose,它只有一个
所以问题必须存在。 在今天的大部分时间里,我一直遇到麻烦。

提前致谢!

在nl2br_lose中:

`return preg_replace("/<br\s?\/?>/", '', $string); //removes <br>, <br/>, <br />, <br >`

当然,为了简单起见,它交换了可读性。 另一个选择是写一个函数来调用而不是nl2br:

function stripnl2br($string) {return str_replace("\n", '', nl2br($string));}

您只需要替换没有任何内容的br匹配,因为nl2br不会删除空格。

return str_replace(array(
        '<br/>',
        '<br />',
        '<br>',
        '<br >'
    ), '', $string);

PS您可能想要将名称从nl2br_lose更改为br2nl :)

nl2br在换行符前添加br,但不删除换行符。 当您在nl2br_lose中包装该输出时,它需要:

blahblah<br>\nblahblah

来自nl2br并把它变成了

blahblah\n\nblahblah

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM