0

例如:

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

至:

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

如果一个字符串中超过 2<br>个,它应该删除所有的<br>并只保留两个。到目前为止的代码:

$txt_unclean = trim(nl2br($_POST['txt_content']));
$txt_content = strip_tags($txt_unclean, '<br>');

你下一步怎么做?我如何允许不超过 2 <br>

4

3 回答 3

6

如果您的标记是这样控制的,您可以使用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 解析器来完成这项工作;话虽如此,这并不容易:)

于 2013-04-22T03:51:32.543 回答
4

由于您可以在换行符转换为 s 之前访问该字符串<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

[演示]

于 2013-04-23T02:25:01.363 回答
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);
于 2013-04-22T03:55:07.480 回答