PHP HTMLPurifier不删除空表(但实际演示' ..)

时间:2017-05-13 15:03:45

标签: php html htmlpurifier

使用html字符串在我的localhost上使用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 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不同的输出?

1 个答案:

答案 0 :(得分:1)

通过HTML Purifier支持解决了..我所要做的就是将其添加到我的$config

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

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