如何在PHP中将多个标签转换为单个标签

时间:2020-03-06 14:43:22  来源:igfitidea点击:

想要转换

<br/>
<br/>
<br/>
<br/>
<br/>

进入

<br/>

解决方案

使用正则表达式一次或者多次匹配<br/>,然后使用preg_replace(或者类似形式)替换为<br/>,例如levik的回复。

我们可以使用正则表达式执行此操作:

preg_replace("/(<br\s*\/?>\s*)+/", "<br/>", $input);

如果我们传入源HTML,则会返回一个字符串,其中包含一个<br/>替换每次运行。

我们可能要使用正则表达式。我还没有测试以下内容,但是我认为这是正确的。

$text = preg_replace( "/(<br\s?\/?>)+/i","<br />", $text );

我的几乎与levik的(+1)相同,只是说明了一些不同的br格式:

preg_replace('/(<br[^>]*>\s*){2,}/', '<br/>', $sInput);

没有preg_replace,但仅适用于PHP 5.0.0+

$a = '<br /><br /><br /><br /><br />';
while(($a = str_ireplace('<br /><br />', '<br />', $a, $count)) && $count > 0)
{}
// $a becomes '<br />'

较短的增强的可读性,无论属性如何,都能产生正确的输出:

preg_replace('{(<br[^>]*>\s*)+}', '<br/>', $input);

谢谢大家..
使用的Jakemcgraw(+1)版本

刚刚添加了区分大小写的选项。

{(<br[^>]*>\s*)+}i

测试这些正则表达式的好工具是:

http://www.spaweditor.com/scripts/regex/index.php

一种快速的非正则表达式方法:

while(strstr($input, "<br/><br/>"))
{
    $input = str_replace("<br/><br/>", "<br/>", $input);
}