2010-11-09 10 views
6

Questa è una specie di combinazione speciale di tag che voglio consentire in HTMLPurifier, ma non riesco a far funzionare la combinazione.Come faccio a consentire i tag script, oggetto, param, embed e iframe in HTMLPurifier?

Posso ottenere il funzionamento dei tag di script, ma i tag di incorporamento vengono rimossi (abilito i tag di script con HTML.Trusted = true). Quando rimetto i tag di incorporamento, i tag di script vengono rimossi (rimuovo HTML.Trusted). Quello che segue è la mia configurazione:

 $config->set('HTML.Trusted', true); 
     $config->set('HTML.SafeEmbed', true); 
     $config->set('HTML.SafeObject', true); 
     $config->set('Output.FlashCompat', true); 

Ho anche provato ad aggiungere in seguito alla quale ha peggiorato le cose:

 $config->set('HTML.Allowed', 'object[width|height|data],param[name|value],embed[src|type|allowscriptaccess|allowfullscreen|width|height],script[src|type]'); 

Inoltre, io non riesco a ottenere iframe per lavorare non importa quale. Ho provato ad aggiungere:

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

Qualsiasi aiuto su come ottenere l'intera combinazione di lavorare, o anche i tag script con oggetto/param e embed sarebbe molto apprezzato !!!

Oh sì, questo ovviamente non è per tutti gli utenti, solo per utenti "speciali".

Grazie!

PS - per favore non mi collegamento a http://htmlpurifier.org/docs/enduser-customize.html


UPDATE

ho trovato una soluzione per l'aggiunta di iframe al fondo della filettatura qui: http://htmlpurifier.org/phorum/read.php?3,4646

L'attuale la configurazione è ora:

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

AGGIORNAMENTO PER L'AGGIORNAMENTO

Se hai problemi con il mio commento nel forum HTMLPurifier, può essere perché voglio dire per il metodo a guardare come questo:

public function preFilter($html, $config, $context) { 
    return preg_replace("/iframe/", "img class=\"MyIframe\" ", preg_replace("/<\/iframe>/", "", $html)); 
} 
+0

"Non utilizzare HTML Purifier." :-) –

+0

Il purificatore dell'HTML! Perché non dovrei usarlo? ;) – shmuel613

+0

Per essere veramente corretto, dovresti probabilmente estendere 'HTMLPurifier_Filter'. La soluzione è comunque ottima; Sto utilizzando questo, ma autorizzo i domini di cui mi fido invece (ad esempio la nuova incorporazione di iframe di youtube). –

risposta

5

Ho trovato la soluzione tramite il gruppo Google HTMLPurifier (grazie Edward Z. Yang !!!). La soluzione per consentire che i tag object, embed e script esistano contemporaneamente nella pagina è RIMUOVERE "object", dall'array $ common nel metodo HTMLModuleManager.php __construct(). Questo ovviamente farà in modo che nessuno possa aggiungere tag oggetto a meno che non lo specifichi nella tua configurazione.

mio config finale è ora:

 $config->set('HTML.Trusted', true); 
     $config->set('HTML.SafeObject', true); 
     $config->set('Output.FlashCompat', true); 
     $config->set('Filter.Custom', array(new HTMLPurifier_Filter_SafeIframe())); 

Spero davvero che queste istruzioni può aiutare altri sviluppatori che desiderano utilizzare HTMLPurifier. Rispetto a quello che stavamo usando per pulire e scrub il testo in arrivo dal nostro editor wysiwyg, HTMLPurifier è circa l'85% più veloce!

+1

Come ottengo una copia della classe 'HTMLPurifier_Filter_SafeIframe'? – Sonny

+0

vedi questa [domanda] (http://stackoverflow.com/questions/4739284/htmlpurifier-iframe-vimeo-and-youtube-video) – Piero