【问题标题】:Remove redundant tags '<p><br></p>' in php?删除 php 中的冗余标签“<p><br></p>”?
【发布时间】:2016-10-23 02:42:03
【问题描述】:

去掉字符串开头和结尾的冗余标签&lt;p&gt;&lt;br&gt;&lt;/p&gt;,中间只留下一个。

输入:

<p><br></p><p><br></p><p><br></p><p>gfdsgfdsgfds</p><p><br></p><p><br></p><p><br></p><p>gfdsgfdsgfdsgfds</p><p><br></p><p><br></p><p><br></p>

期望的输出:

<p>gfdsgfdsgfds</p><p><br></p><p>gfdsgfdsgfdsgfds</p>

替代的期望输出:

<p>gfdsgfdsgfds</p><p><br></p><p><br></p><p><br></p><p>gfdsgfdsgfdsgfds</p>

我试过用:preg_replace

$string = preg_replace('/(<p><br></p>)+/', '', $string);

但结果为空。

【问题讨论】:

  • 我的第一个问题是,你为什么会有这么多的标签?

标签: php regex preg-replace summernote


【解决方案1】:

您需要在您的正则表达式中转义斜线/ 字符

$string = preg_replace('/(<p><br><\/p>)+/', '', $string);

另请注意,这将删除所有出现多个这些模式的实例,结果如下:

<p>gfdsgfdsgfds</p><p>gfdsgfdsgfdsgfds</p>

要删除重复项但保留一个实例,可以执行以下操作:

$string = preg_replace('/(<p><br><\/p>)+/', '<p><br></p>', $string);

【讨论】:

  • 捕获组是你的朋友,使用反向引用:$string = preg_replace('/(&lt;p&gt;&lt;br&gt;&lt;\/p&gt;)+/', '$1', $string);
【解决方案2】:

也许净化器http://htmlpurifier.org/可以帮到你。它可以清理 html 代码,也可以在需要时删除 javascript。

【讨论】:

    猜你喜欢
    • 2018-05-19
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    相关资源
    最近更新 更多