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
部分和脚本
。搜索了很多并尝试了一些不同的东西。
$ hp_config-&gt; set('HTML.SafeScripting' ,['// platform.twitter.com/widgets.js'];
&#xA;没有帮助,因为Twitter嵌入只是一个例子,Facebook嵌入甚至不给src,但完整的 function()
,我使用了很多不同的嵌入源。
$ hp_config-&gt; set('HTML.Trusted',true);
保留 script
标记,但删除 async
和 charset
属性。
$ 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;我也用清洁剂来清洁 iframe
嵌入,但对于这些我使用:
$ hp_config-&gt; set('HTML.SafeIframe',true); &#xA; $ hp_config-&gt; set('URI.SafeIframeRegexp','%%');&#xA;
&#xA;&#xA; 只有部分可信用户可以编辑这些嵌入,所以我允许所有来源。
&#xA;&#xA;那么如何将 script
标签保留原样,但修复其他所有标签(如关闭标签和其他标签的属性)?
答案 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');