php nl2br限制x金额

时间:2010-06-12 02:49:16

标签: php

嗨,这很简单

我想知道如何使用nl2br();在PHP中,但限制一次允许的连续< br />的数量。

//例如:用户输入

1st line

2 line breaks



3 line breaks





6 line breaks


2 line breaks




反正有没有PHP将< br />'限制为不超过x时的数字

因此,如果我们一次仅允许4< br>输出

1st line

2 line breaks



3 line breaks




6 line breaks (changed to 4)


2 line breaks

2 个答案:

答案 0 :(得分:4)

在将内容传递到nl2br:

之前,尝试使用正则表达式来限制顺序换行符
$clean = preg_replace('/\n{4,}/', '\n', preg_replace('/\r/', '', $dirty));

对于没有经验的人:

  • \ r \ n是一个回车符,我们可以在调用nl2br
  • 之前安全地删除它
  • \ n是Newline
  • {4,}表示“重复最后一个字符四次或更多次

因此,一行中四个或更多新行的任何序列都将减少为一个。

不幸的是,这很容易被打败。用户可以简单地过来并按Enter键+空格+输入+空格+输入+空格...

但这是一个开始。让我们让它变得更加白痴。

$dirty = preg_replace('/\r/', '', $dirty);
$clean = preg_replace('/\n{4,}/', '\n', preg_replace('/^\s+$/m', '', $dirty));

现在我们也是:

  • 设置“m”修饰符......
  • ^表示“行的开头”(没有“m”表示整个字符串的开头)
  • $表示“行尾”(没有“m”表示整个字符串的结尾)
  • \ s +表示“任何空格字符,重复”

所以,现在它删除了\ r,然后将只有空格的行更改为空,然后它限制空行。

请注意,这可能会破坏格式化,具体取决于您使用的标记。某些标记引擎可以在纯空白行上运行,并使用它们进行智能操作,例如此处使用的标记引擎。

你考虑过禁止混蛋吗?它有时是有效的。 :)

答案 1 :(得分:2)

得到它们,这不会允许一次超过x量的换行符。

$ string =输入正在修改
$ num =我们不允许用户浏览的换行符数量

function nl2br_limit($string, $num){

    return preg_replace('/\n/', '<br/>', preg_replace('/(\s{'.$num.'})\s+/','$1', $string));
    }