2010-11-09 88 views
6

這是怎麼樣的,我想允許HTMLPurifier標籤一支專兼結合的,但似乎無法得到的結合工作。如何在HTMLPurifier中允許腳本,對象,參數,嵌入和iframe標籤?

我可以得到腳本標籤工作,但隨後嵌入標記獲取刪除(我支持與HTML.Trusted =真正的腳本標記)。當我嵌入標籤時,腳本標籤被剝離(我刪除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


UPDATE

我發現了一個解決方案,在螺紋的底部在這裏添加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

「不要使用HTML淨化器」。 :-) – 2011-01-19 17:53:10

+0

HTML淨化器岩石!爲什麼我不想使用它? ;) – shmuel613 2011-02-14 09:03:43

+0

要真正正確,你應該擴展'HTMLPurifier_Filter'。不過,解決方案還是很棒的。我正在使用這個功能,但將我信任的域列入白名單(例如,youtube的新iframe嵌入)。 – 2011-03-15 00:48:18

回答

5

通過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%!

+1

如何獲得'HTMLPurifier_Filter_SafeIframe'類的副本? – Sonny 2011-09-13 14:32:34

+0

看到這個[問題](http://stackoverflow.com/questions/4739284/htmlpurifier-iframe-vimeo-and-youtube-video) – Piero 2012-10-14 17:41:02