在我们的系统中,用户经常从其他来源(如Excel/Word)复制/粘贴表格,这导致表格在许多地方有高度标签或属性。我在想我可以使用模式匹配(preg_replace)来查找和删除这些实例,因为包含高度规格在我们的系统中导致问题,当这个HTML被我们的PHP API用于输出格式化报告时,但我一直试图这样做,在过去的3天没有太大的成功,因为我不擅长以这种方式使用正则表达式。
我已经阅读了php.net上的文档和示例,并回顾了这里关于这个主题的相当多的帖子,但我仍然不知道如何仅将模式匹配应用于标记内的实例等。
另外,如果它只包含一个height属性,那么我如何删除整个标记,然后如果包含其他属性则只包含height属性?
这是我需要清理的代码示例。这只是一小部分,因为它通常会包含多个表元素,类似于我下面包含的元素,以及图像、文本等:
<table style="height:126px;" width="243">
<tbody>
<tr style="height: 18px;">
<td style="width: 38.5px; height: 18px;">ABC</td>
<td style="width: 41.5469px; height: 18px;">123</td>
<td style="width: 50.6562px; height: 18px;">DEF;</td>
<td style="width: 99.2969px; height: 18px;">456</td>
</tr>
<tr style="height:18px;">
<td style="width: 38.5px; height: 18px;">GHI</td>
<td style="width: 41.5469px; height: 18px;">789</td>
<td style="width: 50.6562px; height: 18px;">JKL</td>
<td style="width: 99.2969px; height: 18px;">012</td>
</tr>
<tr style="height:18px;">
<td style="width: 38.5px; height: 18px;">MNO</td>
<td style="width: 41.5469px; height: 18px;">345</td>
<td style="width: 50.6562px; height: 18px;">PQR</td>
<td style="width: 99.2969px; height: 18px;">678</td>
</tr>
</tbody>
</table>
这可以使用preg_replace完成吗,或者我需要使用不同的技术吗?非常感谢任何指导或协助。一个"cleaned"上面的版本看起来像这样:
<table width="243">
<tbody>
<tr>
<td style="width: 38.5px;">ABC</td>
<td style="width: 41.5469px;">123</td>
<td style="width: 50.6562px;">DEF;</td>
<td style="width: 99.2969px;">456</td>
</tr>
<tr>
<td style="width: 38.5px;">GHI</td>
<td style="width: 41.5469px;">789</td>
<td style="width: 50.6562px;">JKL</td>
<td style="width: 99.2969px;">012</td>
</tr>
<tr>
<td style="width: 38.5px;">MNO</td>
<td style="width: 41.5469px;">345</td>
<td style="width: 50.6562px;">PQR</td>
<td style="width: 99.2969px;">678</td>
</tr>
</tbody>
</table>
您是否考虑过简单地将'height:' style属性与不存在的属性交换(即:DOM将忽略未知标签);例如:
$str = '<table style="height:126px;" width="243">
<tbody>
<tr style="height: 18px;">
<td style="width: 38.5px; height: 18px;">ABC</td>
<td style="width: 41.5469px; height: 18px;">123</td>
<td style="width: 50.6562px; height: 18px;">DEF;</td>
<td style="width: 99.2969px; height: 18px;">456</td>
</tr>
<tr style="height:18px;">
<td style="width: 38.5px; height: 18px;">GHI</td>
<td style="width: 41.5469px; height: 18px;">789</td>
<td style="width: 50.6562px; height: 18px;">JKL</td>
<td style="width: 99.2969px; height: 18px;">012</td>
</tr>
<tr style="height:18px;">
<td style="width: 38.5px; height: 18px;">MNO</td>
<td style="width: 41.5469px; height: 18px;">345</td>
<td style="width: 50.6562px; height: 18px;">PQR</td>
<td style="width: 99.2969px; height: 18px;">678</td>
</tr>
</tbody>
</table>';
$str = str_replace("height:","nulled:",$str);
echo $str;
我把你的表HTML,把它放进一个字符串变量,并做了一个简单的str_replace交换所有引用的高度:到null:剥离的高度属性的字符串,当我回显字符串我得到清理表你放在你的例子。
可能有一个更漂亮的方法,但这对我有效。:)