限制textarea的保留换行符

时间:2015-09-23 16:43:53

标签: php mysql laravel eloquent textarea

好的,所以我在上传到我的数据库时保留了换行符,并且在网页上显示时会看到它们,但我有一个问题。我的网站是一个论坛,我不希望用户在文本之间有一个过多的换行符主题...例如:

line 1
<1 blank line>
<2 blank lines>
<3 blank lines>
<4 blank lines>
line 2
<1 blank line>
<2 blank lines>
line 3

这将使我的页面比它需要的时间长得多,并且只会导致令人不愉快的页面。无论如何我可以在文本行之间只添加一行新的地方,例如

line 1
<1 blank line>
line 2
<1 blank line>
line 3

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

我们可以使用多种方法来实现这一目标:

使用正则表达式:

$str = preg_replace('/^[ \t]*[\r\n]+/m', '', $content);
echo (nl2br($str));

自定义功能:

echo removeBlankLines($content);
function removeBlankLines($content = null)
{
   $lines = explode("\n", $content);
   $temp  = array();
   foreach ($lines as $line) {
       $last = end($temp);
       if($line == '' && $last == $line) continue;

       $temp[]   = $line;
       $result[] = $line ? $line : "\n";
   }

   return ($result) ? (nl2br(join('', $result))) : false;
}

输入:

$content = 'line 1



line 2



line 3';

输出:

line 1
line 2
line 3

答案 1 :(得分:1)

也许这就是你要找的东西(我假设论坛上的帖子是用HTML格式化的,但如果你在HTML格式化之前有文本,你可以为\n应用相同的逻辑 - 见{{3 }}):

MBaas's answer

答案 2 :(得分:0)

假设您可以访问&#34;原始数据&#34;在进入数据库之前,你可以对连续的换行进行字符串搜索,并用一个换行替换 - 可能正如\n{2,}这样的正则表达式可以完成这项工作。

在PHP中,它类似于$result = preg_replace('/\n{2,}/', '\n', $subject);