使用HTML Purifier删除<script> embed(最新4.8.0)

时间:2016-09-20 11:10:20

标签: attributes tags embed htmlpurifier

Twitter嵌入代码示例:

&#xA;&#xA;
 &lt; blockquote class =“twitter-tweet”data-lang =“en”&gt;&lt; p lang = “en”dir =“ltr”&gt;这里的一些文字&lt; a href =“https://some.twitter.link”&gt; pic.twitter.com /...< / a&gt;&lt; / p&gt; &安培; MDASH;一些用户&lt; a href =“http://other.twitter.link”&gt; 2016年8月10日&lt; / a&gt;&lt; / blockquote&gt;&#xA;&lt; script async src =“// platform.twitter。 com / widgets.js“charset =”utf-8“&gt;&lt; / script&gt;&#xA;  
&#xA;&#xA;

净化后,我只得到它删除了 blockquote 部分和脚本。搜索了很多并尝试了一些不同的东西。

&#xA;&#xA;
&#xA;&#xA;

$ hp_config-&gt; set('HTML.SafeScripting' ,['// platform.twitter.com/widgets.js'];
&#xA;没有帮助,因为Twitter嵌入只是一个例子,Facebook嵌入甚至不给src,但完整的 function(),我使用了很多不同的嵌入源。

&#xA;&#xA;
&#xA;&#xA;

$ hp_config-&gt; set('HTML.Trusted',true); 保留 script 标记,但删除 async charset 属性。

&#xA;&#xA;
&#xA;&#xA;
  $ def = $ hp_config-&gt; getHTMLDefinition();&#xA; $ def - &gt; addAttribute('script','async','Text#');&#xA; $ def-&gt; addAttribute('script','charset','Charsets#utf-8');&#xA ;  
&#xA;&#xA;

这也无济于事。我不知道我做得对。找不到详细的例子。

&#xA;&#xA;
&#xA;&#xA;
&#xA;&#xA;

我也用清洁剂来清洁 iframe 嵌入,但对于这些我使用:

&#xA;&#xA;
  $ hp_config-&gt; set('HTML.SafeIframe',true); &#xA; $ hp_config-&gt; set('URI.SafeIframeRegexp','%%');&#xA;  
&#xA;&#xA;

只有部分可信用户可以编辑这些嵌入,所以我允许所有来源。

&#xA;&#xA;

那么如何将 script 标签保留原样,但修复其他所有标签(如关闭标签和其他标签的属性)?

&#XA;

1 个答案:

答案 0 :(得分:0)

从我们的评论对话来看,您似乎更有兴趣整理HTML而不是清理它。因此,HTML Purifier可能不适合您。您可以查看PHP's Tidy module(HTML Tidy的包装),或查看alternatives

如果您确实想要教HTML HTML Purifier以接受脚本标记,HTML.Trusted是正确的设置。也就是说,HTML Purifier目前不支持HTML5,因此不理解像async这样的HTML5属性。要教授HTML Purifier属性,您需要按照the Enduser "Customize" documentation上的说明进行操作。

在您的情况下,要采取的第一步是将其添加到您的代码中:

$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.DefinitionID', 'enduser-customize.html tutorial');
$config->set('HTML.DefinitionRev', 1);
$config->set('Cache.DefinitionImpl', null); // remove this later!
$def = $config->getHTMLDefinition(true);
$def->addAttribute('script', 'async', 'Bool#async');

这教授HTML Purifier,async是标记的预期布尔值。如果您想允许charset属性,请尝试:

$def->addAttribute('script', 'charset', 'Enum#utf-8');

...或者您想要支持的任何其他字符集。如果您想支持任何值:

$def->addAttribute('script', 'charset', 'CDATA');