7

これは、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);

コンボ全体を機能させるための助け、またはオブジェクト/パラメーターと埋め込みを含むスクリプトタグでさえ、大いに感謝します!!!

そうそう、これは明らかにすべてのユーザー向けではなく、「特別な」ユーザー向けです。

ありがとう!

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));
}
4

1 に答える 1

6

HTMLPurifier Google グループを通じて解決策を見つけました (Edward Z. Yang に感謝します!!!)。object、embed、および script タグが同時にページに存在できるようにする解決策は、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% 高速です!

于 2010-11-10T13:08:02.883 に答える