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> </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.RemoveEmpty
和 AutoFormat.RemoveSpansWithoutAttributes
在 Live 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 不见了。
使用 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> </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.RemoveEmpty
和 AutoFormat.RemoveSpansWithoutAttributes
在 Live 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 不见了。