如何使用PHP从HTML代码中删除冗余的<br />标签?

4

我正在使用PHP解析一些混乱的HTML代码,其中有一些多余的
标签,我想稍微清理一下。例如:

<br>

<br /><br /> 


<br>

我该如何使用preg_replace()将类似这样的内容替换为这个内容呢?:

<br /><br />

新行、空格以及 <br><br/><br /> 之间的区别都需要考虑在内。 编辑:基本上,我想用两个换行符来替换连续三个或更多的换行符。

1
你如何区分哪些是冗余的,哪些不是? - Pradeep
基本上,我想用两个换行符替换每个连续出现三次或更多次的换行符。 - delaccount992
5个回答

6

这里有一段你可以使用的代码。第一行代码用于查找2个或更多的<br>标签(之间带有空格并且类型不同),并将它们替换为格式良好的<br /><br />

如果需要,我还包括了第二行代码来清理其余的<br>标签。

function clean($txt)
{
    $txt=preg_replace("{(<br[\\s]*(>|\/>)\s*){2,}}i", "<br /><br />", $txt);
    $txt=preg_replace("{(<br[\\s]*(>|\/>)\s*)}i", "<br />", $txt);
    return $txt;
}

只有一件事,如果你将第一个替换中的<br /><br />改为<p />,你可以获得更好的输出(HTML方面,不确定你是否打算显示它)。 - H9kDroid

5

应该可以使用最少的限定符来实现这个功能:

preg_replace('/(<br[\s]?[\/]?>[\s]*){3,}/', '<br /><br />', $multibreaks);

应该匹配令人震惊的<br><br /><br/><br>结构。


这几乎是完美的,但是它卡在了 <br> 标签上。 - delaccount992
稍微添加了一些内容;不完美,因为它也会匹配<br> - Karl Andrew
哦。看起来对于这样的东西不起作用:<br> \n \n \n \n<br><br> - delaccount992
在断点之间添加了可选的空格数量,这样可以工作吗? - Karl Andrew
它是否不仅适用于空格,还适用于换行符?无论如何,它似乎运行得非常好。我只有一个小问题:"</p><br /><br /><ul class='blurbs'>"。这会导致3-4个不必要的换行符,但我认为我可以自己解决。感谢您的帮助! - delaccount992

3

这将替换所有的换行符...即使它们是大写的:

preg_replace('/<br[^>]*>/i', '', $string);

看一下我给 hsz 的评论。我认为这是同样的情况。 - delaccount992
值得注意的是,这种方法也有危险,因为它可能会匹配诸如<br clear="all">或类似结构的标签,这些标签可能不希望完全折叠。当然,在这种情况下可能并不相关。 - Chris

0
使用str_replace函数进行简单替换更好,而且你还可以传递一个数组来代替单个搜索值。
$newcode = str_replace("<br>", "", $messycode);

作者写道:基本上我想用两个换行符来替换每个连续三个或更多的换行符。 - user562854
谢谢,但简单的替换不是我需要的。我想我的初始帖子有点令人困惑。 - delaccount992

0

尝试使用:

preg_replace('/<br\s*\/?>/', '', $inputString);

这会删除所有的换行标签,对吗?如果是这样,那不是我需要的。我希望将三个或更多连续的换行标签替换为只有两个。 - delaccount992

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接