php 是否使用preg_replace从表元素中删除所有高度标签/属性?

4sup72z8  于 2023-01-01  发布在  PHP
关注(0)|答案(1)|浏览(112)

在我们的系统中,用户经常从其他源(如Excel/Word)复制/粘贴表,这会导致表在许多地方具有高度标签或属性。(preg_replace)查找并删除这些示例,因为当PHP API使用此HTML输出格式化报告时,包含高度规范会导致系统出现问题,但是我在过去的3天里一直在尝试这样做,但没有太大的成功,因为我不擅长以这种方式使用正则表达式。
我已经阅读了www.example.com上的文档和示例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来完成吗?还是我需要使用其他的技术?任何指导或帮助都将不胜感激。上面的“清理”版本看起来像这样:

已清洁

<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>
cs7cruho

cs7cruho1#

您是否考虑过简单地将"height:"样式属性替换为不存在的属性(即: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来交换所有对height的引用:to nulled:将height属性从字符串中剥离出来,当我回显字符串时,我得到了示例中放置的经过清理的表。
可能还有更漂亮的方法,但这对我很有效。:)

相关问题