删除所有样式属性但不删除表中可用的样式属性 - PHP

时间:2011-06-06 10:26:33

标签: php html

如何删除所有样式属性BUT NOT TO REMOVE样式属性 表格中提供 - PHP

例如:

<div style="text-align: justify; text-indent: -13.5pt; ><strong>Motion with Constant Acceleration</strong></div>
<table cellspacing="0" cellpadding="0" border="1" style="border: medium none; border-collapse: collapse;">
<tr><td width="114" style="border: 1pt;"><div align="center">&nbsp;</div></td>
<td width="264" style="border-width: 1pt 1pt 1pt medium;" colspan="2">Data Sheet</td>
<td width="157" style="border-width: 1pt 1pt 1pt medium;"><div align="center">&nbsp;</div></td>
</tr>
<tr style="height: 0.4in;"><td width="114" style="border-width: medium 1pt 1pt;"><div align="center">&nbsp;</div></td>
<td width="156" style="border-width: medium 1pt 1pt medium;">Incline angle</td>
<td width="108" style="border-width: medium 1pt 1pt medium;"><div align="center">&nbsp;</div></td>
<td width="157" style="border-width: medium 1pt 1pt medium;"><div align="center">&nbsp;</div></td>
</tr>
</table>

我的输出应该是这样的(注意div标签):

<div><strong>Motion with Constant Acceleration</strong></div>
<table cellspacing="0" cellpadding="0" border="1" style="border: medium none; border-collapse: collapse;">
<tr><td width="114" style="border: 1pt;"><div align="center">&nbsp;</div></td>
<td width="264" style="border-width: 1pt 1pt 1pt medium;" colspan="2">Data Sheet</td>
<td width="157" style="border-width: 1pt 1pt 1pt medium;"><div align="center">&nbsp;</div></td>
</tr>
<tr style="height: 0.4in;"><td width="114" style="border-width: medium 1pt 1pt;"><div align="center">&nbsp;</div></td>
<td width="156" style="border-width: medium 1pt 1pt medium;">Incline angle</td>
<td width="108" style="border-width: medium 1pt 1pt medium;"><div align="center">&nbsp;</div></td>
<td width="157" style="border-width: medium 1pt 1pt medium;"><div align="center">&nbsp;</div></td>
</tr>
</table>

2 个答案:

答案 0 :(得分:0)

用正则表达式解析/破解HTML的坏主意。您可以尝试以下方式:

 s/(?<!table[^>])style=".*"//

含义:当尝试向后匹配时,没有任何东西替换style =“”,在任何&gt;之前没有表格字符。

可能需要一些微调工作,但是没试过,我仍然认为这是一个坏主意。

微调,我建议看look-behind in regex。我不知道php regex是否支持lookbehind,由你来检查,这是一个骨架,而不是一个完整的答案。

答案 1 :(得分:0)

为了正确地做到这一点,我建议使用html净化器:http://htmlpurifier.org/,它是唯一具有安全和防弹方式处理这些方法的高度可配置的html解析器之一。

您可以使用允许的属性来测试它: http://htmlpurifier.org/demo.php

配置文档: http://htmlpurifier.org/live/configdoc/plain.html#CSS.AllowedProperties