Javascript 如何在HTMLPurifier中允许使用脚本、对象、参数、嵌入和iframe标记?

Javascript 如何在HTMLPurifier中允许使用脚本、对象、参数、嵌入和iframe标记?,javascript,object,iframe,embed,htmlpurifier,Javascript,Object,Iframe,Embed,Htmlpurifier,这是一种特殊的标签组合,我想在HTMLPurifier中允许使用,但似乎无法使这种组合起作用 我可以让脚本标记工作,但是嵌入标记会被删除(我使用HTML.Trusted=true启用脚本标记)。当我重新获得嵌入标记时,脚本标记被剥离(我删除HTML.Trusted)。以下是我的配置: $config->set('HTML.Trusted', true); $config->set('HTML.SafeEmbed', true); $co

这是一种特殊的标签组合,我想在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-请不要将我链接到


更新

我在这里找到了在线程底部添加iFrame的解决方案:

当前配置为:

        $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));
}
公共函数预过滤器($html、$config、$context){
返回preg\u replace(“/iframe/”,“img class=\“MyIframe\”,preg\u replace(“/”,“,$html));
}

通过HTMLPurifier谷歌集团找到了解决方案(谢谢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的开发人员。与我们最初用来清理和擦洗所见即所得编辑器中输入的文本相比,HTMLPurifier大约快了85%

“不要使用HTML净化器。”:-)HTML净化器棒极了!我为什么不想用它呢?;)要想真正正确,您可能应该扩展
HTMLPurifier\u过滤器
。不过,解决方案在其他方面是很好的;我使用的是我信任的域的白名单(例如youtube的新iframe嵌入)。如何获得
HTMLPurifier\u Filter\u SafeIframe
类的副本