这是我希望在HTMLPurifier中允许的一种特殊标签组合,但似乎无法使组合起作用。
我可以让脚本标签工作,但嵌入标签会被删除(我使用HTML.Trusted = true启用脚本标签)。当我重新嵌入标签时,脚本标签被删除(我删除了HTML.Trusted)。以下是我的配置:
$config->set('HTML.Trusted', true);
$config->set('HTML.SafeEmbed', true);
$config->set('HTML.SafeObject', true);
$config->set('Output.FlashCompat', true);
我甚至尝试在以下内容中添加更糟糕的内容:
$config->set('HTML.Allowed', 'object[width|height|data],param[name|value],embed[src|type|allowscriptaccess|allowfullscreen|width|height],script[src|type]');
此外,无论如何,我似乎无法让iframe工作。我尝试添加:
$config->set('HTML.DefinitionID', 'enduser-customize.html iframe');
$config->set('HTML.DefinitionRev', 1);
$config->set('Cache.DefinitionImpl', null); // remove this later!
$def = $config->getHTMLDefinition(true);
$iframe = $def->addElement(
'iframe', // name
'Block', // content set
'Empty', // allowed children
'Common', // attribute collection
array( // attributes
'src*' => 'URI#embedded',
'width' => 'Pixels#1000',
'height' => 'Pixels#1000',
'frameborder=' => 'Number',
'name' => 'ID',
)
);
$iframe->excludes = array('iframe' => true);
任何有关让整个组合工作的帮助,甚至是带有object / param和embed的脚本标签都会非常感激!!!
哦,是的,这显然不适合所有用户,只是“特殊”用户。
谢谢!
PS - 请不要将我链接到http://htmlpurifier.org/docs/enduser-customize.html
更新
我找到了一个在线程底部添加iframe的解决方案:http://htmlpurifier.org/phorum/read.php?3,4646
现在的配置是:
$config->set('HTML.Trusted', true);
$config->set('HTML.SafeEmbed', true);
$config->set('HTML.SafeObject', true);
$config->set('Output.FlashCompat', true);
$config->set('Filter.Custom', array( new HTMLPurifier_Filter_MyIframe() ));
更新到更新
如果您在HTMLPurifier论坛中发表评论时遇到问题,可能是因为我的意思是这个方法看起来像这样:
public function preFilter($html, $config, $context) {
return preg_replace("/iframe/", "img class=\"MyIframe\" ", preg_replace("/<\/iframe>/", "", $html));
}
答案 0 :(得分:6)
通过HTMLPurifier Google小组找到解决方案(谢谢Edward Z. Yang !!!)。允许对象,嵌入和脚本标记同时存在于页面上的解决方案是从HTMLModuleManager.php __construct()方法中的$ common数组中删除“object”。这当然会使得除非你在配置中指定它,否则没有人可以添加对象标签。
我的最终配置现在是:
$config->set('HTML.Trusted', true);
$config->set('HTML.SafeObject', true);
$config->set('Output.FlashCompat', true);
$config->set('Filter.Custom', array( new HTMLPurifier_Filter_SafeIframe() ));
我真的希望这些说明可以帮助其他想要使用HTMLPurifier的开发人员。与我们最初用于清理和擦除来自wysiwyg编辑器的传入文本的内容相比,HTMLPurifier的速度提高了大约85%!