使用PHP删除大多数内联样式和属性

时间:2010-04-16 13:56:47

标签: php regex preg-replace

此问题与类似案例有关,即Removing inline styles using 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>

1 个答案:

答案 0 :(得分:5)

像往常一样,正则表达式不适合解析HTML;使用实际的HTML解析器你可能会更好。

那说......

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

...将使用相应标记w / o属性替换任何包含属性的开始标记。但是,它可能会意外地击中包含在其他标签的引用属性中的“标签”(因此实际上并不标记自己)。它还会导致自动关闭标记出现问题(它会将<br />替换为<br>) - 但如果自闭标记在标记名称和标记名称之间没有空格,则可以避免这种情况。斜线。