例如:
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}}。
答案 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
答案 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);