2010-04-16 52 views
0

这个问题是关系到一个类似的案件,即Removing inline styles using php去除大部分内嵌样式和属性与PHP

该解决方案有不删除即:<font face="Tahoma" size="4">

但是,让我们说,我有内联样式喜忧参半和属性,如下所示:

<ul style="padding: 5px; margin: 5px;"> 
    <li style="padding: 2px;"><div style="border:2px solid green;">Some text</div></li> 
    <li style="padding: 2px;"><font face="arial,helvetica,sans-serif" size="2">Some text</font></li> 
    <li style="padding: 2px;"><font face="arial,helvetica,sans-serif" size="2">Some text</font></li> 
</ul> 

需要什么regExp才能实现此结果?

<ul> 
    <li><div>Some text</div></li> 
    <li><font>Some text</font></li> 
    <li><font>Some text</font></li> 
</ul> 

回答

5

像往常一样,正则表达式不理想的解析HTML;用实际的HTML解析器很可能会更好。

也就是说......

$noattributes = preg_replace('/<(\w+) [^>]+>/', '<$1>', $original); 

...将替换包含带有相应标签的属性W/O属性的任何开放标签。然而,它也可能意外地击中了包含在其他标签的引用属性中的“标签”(并且因此不实际标记它们自己)。它也会导致自闭标签问题(它会替代<br /><br>) - 尽管如果自闭标签在标签名称和斜杠之间没有空格,可以避免这种情况。

+0

像这样? $ formatted = preg_replace('<(\w+) [^>] +>,'<$1>',$ text); – Coreus 2010-04-16 14:04:22

+0

查看我编辑的版本;你必须记住分隔正则表达式。 – Amber 2010-04-16 14:04:53

+0

我同意,使用HTML解析更好 – TravisO 2010-04-16 14:19:44