Как разрешить теги script, object, param, embed и iframe в HTMLPurifier? - PullRequest
7 голосов
/ 09 ноября 2010

Это особая комбинация тегов, которую я хочу разрешить в 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]');

Кроме того, я не могу заставить работать фреймы независимо от того,какие.Я попытался добавить:

        $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);

Любая помощь в работе всего комбо или даже теги сценариев с объектом / параметром и встраиванием будет с благодарностью принята !!!

О да, этоочевидно, не для всех пользователей, просто «специальные» пользователи.

Спасибо!

PS - пожалуйста, не связывайте меня с http://htmlpurifier.org/docs/enduser-customize.html


ОБНОВЛЕНИЕ

Я нашел решение для добавления iframes в нижней части потока здесь: 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));
}

1 Ответ

6 голосов
/ 10 ноября 2010

Нашел решение через группу Google HTMLPurifier (спасибо, Эдвард З. Ян !!!). Решение, позволяющее одновременно указывать теги object, embed и script на странице, УДАЛЯТЬ «объект» из массива $ common в методе HTMLModuleManager.php __construct (). Это, конечно, сделает так, что никто не сможет добавить теги объекта, если вы не укажете его в своей конфигурации.

Моя последняя конфигурация теперь:

        $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% быстрее!

...