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

Cor*_*eus 0 php regex preg-replace

这个问题与类似的情况有关,即使用php删除内联样式

那里的解决方案没有删除ie: <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>
Run Code Online (Sandbox Code Playgroud)

需要什么regExp来实现这个结果?

<ul>
    <li><div>Some text</div></li>
    <li><font>Some text</font></li>
    <li><font>Some text</font></li>  
</ul>
Run Code Online (Sandbox Code Playgroud)

Amb*_*ber 5

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

那说......

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

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