允许HTML中最多连续2次换行

时间:2013-04-22 03:46:20

标签: php regex

例如:

StackOverflow<br>
<br>
<br>
<br>
<br>
is
<br>
<br>
<br>
<br>
a
<br>
community.

要:

StackOverflow
<br>
<br>
is
<br>
<br>
a
<br>
community.

如果字符串中有<br>个以上,则应删除所有<br>并仅保留两个$txt_unclean = trim(nl2br($_POST['txt_content'])); $txt_content = strip_tags($txt_unclean, '<br>'); 。 代码到目前为止:

<br>

下一步是什么?如何允许不超过2 {{1}}。

3 个答案:

答案 0 :(得分:5)

如果你的加价是这样控制的,你可以使用preg_replace匹配两个以上的连续<br>

$txt_content = preg_replace('/(<br>\s*){3,}/', '$1$1', $txt_content);

还要匹配自动关闭标签:

$txt_content = preg_replace('/(<br\s*/>\s*){3,}/', '$1$1', $txt_content);

否则,我会考虑使用DOM解析器来完成这项工作;话虽如此,但并不那么容易:)

答案 1 :(得分:4)

由于您可以在将换行符转换为<br>之前访问该字符串,因此我就是这样做的:

<?php
$string = <<<END
1
2


3




4




5
END;
$string = trim(nl2br(preg_replace('/(\r?\n){3,}/', '$1$1', $string)));
echo $string;

输出:

1<br />
2<br />
<br />
3<br />
<br />
4<br />
<br />
5

[Demo]

答案 2 :(得分:0)

代码in action

<?php
$str = <<<STR
StackOverflow<br>
<br>
<br>
<br>
<br>
is
<br>
<br>
<br>
<br>
a
<br>
community.
STR;
echo preg_replace("!(<br(?:\s?/)?>\s*){2,}!s", "<br />\n<br />\n", $str);