【问题标题】:How to remove redundant <br /> tags from HTML code using PHP?如何使用 PHP 从 HTML 代码中删除多余的 <br /> 标签?
【发布时间】:2011-06-03 10:59:46
【问题描述】:

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

<br>

<br /><br /> 


<br>

如何使用 preg_replace() 替换类似的东西?:

<br /><br />

必须考虑换行符、空格以及&lt;br&gt;&lt;br/&gt;&lt;br /&gt; 之间的差异。

编辑:基本上我想用两个替换三个或更多连续中断的每个实例。

【问题讨论】:

  • 你如何区分哪些是多余的,哪些不是?
  • 基本上我想用两个替换三个或多个连续中断的每个实例。

标签: php html regex preg-replace


【解决方案1】:

这是您可以使用的东西。只要有 2 个或更多 &lt;br&gt; 标签(在不同类型之间有空格),第一行就会找到,并将它们替换为格式正确的 &lt;br /&gt;&lt;br /&gt;

如果你也想要的话,我还包括了第二行来清理其余的 &lt;br&gt; 标签。

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;
}

【讨论】:

  • 还有一件事,如果您将第一次替换中的 &lt;br /&gt;&lt;br /&gt; 更改为 &lt;p /&gt; 您可以获得更好的输出(html 副,不确定您是否打算显示它) .
【解决方案2】:

这应该工作,使用最小说明符:

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

也应该匹配骇人听闻的&lt;br&gt;&lt;br /&gt;&lt;br/&gt;&lt;br&gt; 构造。

【讨论】:

  • 这几乎是完美的,但是是的,它在
    标签上令人窒息。
  • 增加了一点;与&lt;br &gt; 不匹配
  • 嗯。它似乎不适用于这样的事情:
    \n \n \n \n

  • 在间隔之间添加了可选数量的空格,这有效吗?
  • 它是否不仅适用于空格,也适用于换行符?无论如何,它似乎工作得很好。我还有一点麻烦:“

      ”。这会导致 3-4 个不需要的换行符,但我想我可以自己处理。感谢您的帮助!
【解决方案3】:

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

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

【讨论】:

  • 查看我给 hsz 的评论。我假设情况相同。
  • 还值得注意的是,这将匹配诸如 &lt;br clear="all"&gt; 之类的标签或可能不希望完全折叠的类似结构的危险。当然,这可能与这种情况无关。
【解决方案4】:

尝试:

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

【讨论】:

  • 这会删除所有中断标签,对吗?如果是这样,这不是我需要的。我想用两个替换三个或更多连续中断标签的任何实例。
【解决方案5】:

使用str_replace,它更适合简单的替换,你也可以传递一个数组而不是单个搜索值。

$newcode = str_replace("<br>", "", $messycode);

【讨论】:

  • 作者写道:基本上我想用两个替换三个或更多连续中断的每个实例。
  • 谢谢,但不幸的是,简单的替换不是我需要的。我想我最初的帖子有点混乱。
猜你喜欢
  • 2016-10-23
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多