用textarea接受换行符以及多换行符的处理


首先说明下问题的缘由:

就是我们一般做留言板的时候是用textarea做接收的,那么textarea默认是不接收换行符号的,所以就产生了这个问题。那要让textarea接收换行可以直接用nl2br()这个函数类解决。但是这样就又产生了一个问题,那就是我如果我输入如下的形式:


那我们接收之后出现的问题就是其实用户只输入了几个没用的字符,但是里面又包含很多的换行,那在浏览器解析完这个内容之后如果换行符号很多,那就会出现有一条内容很长可能占据你整个网页的高度,使得别人看的时候会出现很长的滚动条,那这种体验是不好的,所以我们需要即可以让textarea接收换行但是又不会出现上述的问题,那怎么办呢?就用如下代码解决吧:

$str = preg_replace('/(<br \/>)/', '\n', nl2br($_POST['content']));
$str = preg_replace('/(\\\n\s[^.]){1,}/', '<br />', $str);

而且上面这两行代码是必须的,否则你就会出现我说的那个问题。


另外就是对于编辑器中也同样有这个问题,比如一个CSDN的论坛,别人回复帖子的时候就可以在开始位置写几个字符,然后结尾也是几个字符,然后在中间按住回车键不动,你可以按几分钟之后再松开,然后你点击回复,那你看看你回复之后这个页面变成了什么样,那编辑器的这种可接收换行但又不想出现我说的那种问题的方法的解决办法是很简单的,因为不同的编辑器对于换行的表示是不同的,像我用ueditor测试的时候它的换行表示是:“<p><br /><\/p>”

那你要处理这种很多的换行的话,仅仅需要一个正则替换就可以了,因为从编辑器获取来的数据都是一个长字符串在代码处理上看是输入一行,所以不需要事先加换行符,这就是为什么上面的代码中必须做第一次替换的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值