文本区域,nl2br,大量换行符

3

我有一个文本区域,用户可以输入文本(可以包含任意数量的换行符),我会将该值插入数据库中,然后使用数据库中的值更新文本区域的值。

<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代码。我遇到的问题是,虽然提交值并将其插入数据库有效,但当它填充文本区域的值时,它会使换行符的数量翻倍。 所以如果他们输入:

换行符 Foobar

它会让文本区域的值变成

换行符 换行符 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时使用的"returns"函数。然而,如果我从返回值中去掉nl2br_lose,它只有一个
,因此问题必须出现在那里。我一整天都在处理这个问题,有帮助感激不尽!
3个回答

3

在nl2br_lose函数中:

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

当然,它以简单为代价来换取易读性。另一种选择是编写一个函数来调用,而不是使用nl2br:

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

2

您只需要将br匹配项替换为空,因为nl2br不会删除空格。

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

顺便提一下,你可能想把名称从nl2br_lose改为br2nl :)


0

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

blahblah<br>\nblahblah

将 nl2br 转换为
blahblah\n\nblahblah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接