PHP HTMLPurifier 不删除空的 Table(但在 'Live Demo'..)

PHP HTMLPurifier Not Removing Empty Table (but does on 'Live Demo'..)

使用 html 字符串在我的本地主机上使用 HTMLPurifier。

这是我的代码:

require_once '/htmlpurifier-4.9.2/library/HTMLPurifier.auto.php';

$html = '<table class="product-description-table">
         <tbody>
         <tr>
         <td class="item" colspan="3">Test Title</td>
         </tr>
         <p class="MsoNormal c2"><strong>Test Paragraph 3</strong></p>
         <p class="MsoNormal c2"><strong>Test Paragraph 2</strong></p>
         <p class="MsoNormal c2"><strong>Test Paragraph 3</strong></p>
         <p class="c5"></p>
         <p class="MsoNormal c2"><strong>&nbsp;</strong></p>
         <strong class="c6"><strong><em><br></em></strong></strong>
         <p class="c2"></p>
         <p class="c4"></p>
         </td>
         <td class="product-content-border"></td>
         </tr>
         <tr>
         <td class="gallery" colspan="3">
         <table>
         <tbody>
         <tr>
         <td></td>
         <td></td>
         </tr>
         <tr>
         <td></td>
         <td></td>
         </tr>
         <tr>
         <td></td>
         <td></td>
         </tr>
         <tr>
         <td></td>
         <td></td>
         </tr>
         <tr>
         <td></td>
         <td></td>
         </tr>
         <tr>
         <td></td>
         <td></td>
         </tr>
         <tr>
         <td></td>
         <td></td>
         </tr>
         <tr>
         <td></td>
         <td></td>
         </tr>
         </tbody>
         </table>
         </td>
         </tr>
         </tbody>
         </table>';

         $config = HTMLPurifier_Config::createDefault();
         $config->set('AutoFormat.RemoveEmpty', true);
         $config->set('AutoFormat.RemoveSpansWithoutAttributes', true);
         $purifier = new HTMLPurifier($config);
         $clean_html = $purifier->purify($html);

         echo $clean_html;

现在,使用完全相同的字符串,并且(假设)完全相同的过滤器 AutoFormat.RemoveEmptyAutoFormat.RemoveSpansWithoutAttributesLive Demo

上工作正常

输出:

<table class="product-description-table"><tbody><tr><td class="item" colspan="3">Test Title</td>
</tr></tbody></table><p class="MsoNormal c2"><strong>Test Paragraph 3</strong></p>
<p class="MsoNormal c2"><strong>Test Paragraph 2</strong></p>
<p class="MsoNormal c2"><strong>Test Paragraph 3</strong></p>

<p class="MsoNormal c2"><strong> </strong></p>
<strong class="c6"><strong><em><br /></em></strong></strong>

但是使用我的 PHP 代码,当我查看源代码时,它保持空 table。

输出:

<table class="product-description-table"><tbody><tr><td class="item" colspan="3">Test Title</td>
</tr></tbody></table><p class="MsoNormal c2"><strong>Test Paragraph 3</strong></p>
<p class="MsoNormal c2"><strong>Test Paragraph 2</strong></p>
<p class="MsoNormal c2"><strong>Test Paragraph 3</strong></p>

<p class="MsoNormal c2"><strong> </strong></p>
<strong class="c6"><strong><em><br /></em></strong></strong>
<table><tbody><tr><td></td>
<td></td>
</tr><tr><td></td>
<td></td>
</tr><tr><td></td>
<td></td>
</tr><tr><td></td>
<td></td>
</tr><tr><td></td>
<td></td>
</tr><tr><td></td>
<td></td>
</tr><tr><td></td>
<td></td>
</tr><tr><td></td>
<td></td>
</tr></tbody></table>

为什么这不起作用?为什么我的 PHP 脚本没有得到与 Live Demo 相同的输出?

通过 HTML 净化器支持解决了问题。我所要做的就是将其添加到我的 $config

$config->set('AutoFormat.RemoveEmpty.Predicate', [
    'table' =>
        []
]);

它正在使用版本 4.9.2。讨厌的 table 不见了。