【问题标题】:Text Area, nl2br, line breaks galore文本区域,nl2br,大量换行
【发布时间】:2010-12-13 00:50:12
【问题描述】:

我有一个 textarea,用户可以在其中输入文本(根据需要提供任意数量的 returns),然后我获取该值,将其插入数据库,然后使用一个在数据库中。

<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。我遇到的问题是,在提交值并将其插入数据库时​​,当它填充文本区域的值时,它会使换行符的数量增加一倍。 所以如果他们输入

换行 富吧

它将使文本区域的值

嘿嘿 换行 换行 富吧

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,它只有一个
,所以问题一定存在。我今天大部分时间都遇到了这个问题。

提前致谢!

【问题讨论】:

    标签: php html


    【解决方案1】:

    在 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 :)

      【讨论】:

        【解决方案3】:

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

        blahblah<br>\nblahblah
        

        来自nl2br并将其变成

        blahblah\n\nblahblah
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-06
          • 2012-10-17
          • 2023-03-14
          • 1970-01-01
          相关资源
          最近更新 更多