2010-11-09 3 views
6

C'est une sorte de combinaison spéciale de balises que je veux autoriser dans HTMLPurifier, mais je n'arrive pas à faire fonctionner la combinaison.Comment autoriser les balises script, object, param, embed et iframe dans HTMLPurifier?

Je peux obtenir des balises de script pour fonctionner, mais les balises embed sont supprimées (j'active les balises de script avec HTML.Trusted = true). Lorsque je récupère les balises, les balises de script sont supprimées (je supprime HTML.Trusted). Voici ma config:

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

J'ai même essayé d'ajouter dans la suite qui fait qu'empirer les choses:

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

, je ne peux pas sembler aussi pour obtenir les iframes de travailler, peu importe quoi. J'ai essayé d'ajouter:

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

Toute aide à obtenir l'ensemble combo de travailler, ou même des balises de script avec objet/param et Embed serait très apprécié !!!

Oh oui, ce n'est évidemment pas pour tous les utilisateurs, juste des utilisateurs "spéciaux".

Merci!

PS - s'il vous plaît ne me lie pas à http://htmlpurifier.org/docs/enduser-customize.html


MISE À JOUR

J'ai trouvé une solution pour ajouter iframes au fond du filet ici: http://htmlpurifier.org/phorum/read.php?3,4646

Le courant la configuration est maintenant:

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

MISE À JOUR DE LA MISE A JOUR

Si vous éprouvez des difficultés avec mon commentaire dans le forum htmlpurifier, il peut être parce que je veux dire pour que la méthode ressemble à ceci:

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

"Ne pas utiliser HTML Purifier". :-) –

+0

HTML Purificateur des roches! Pourquoi ne voudrais-je pas l'utiliser? ;) – shmuel613

+0

Pour être vraiment correct, vous devriez probablement étendre 'HTMLPurifier_Filter'. La solution est par ailleurs géniale. J'utilise à la place des domaines en liste blanche mais en qui j'ai confiance (par exemple, la nouvelle incorporation d'iframe sur youtube). –

Répondre

5

J'ai trouvé la solution via le groupe Google HTMLPurifier (merci Edward Z. Yang !!!). La solution pour permettre l'insertion simultanée de balises d'objet, d'intégration et de script sur la page consiste à SUPPRIMER "object" du tableau $ common dans la méthode HTMLModuleManager.php __construct(). Cela permettra bien sûr de faire en sorte que personne ne puisse ajouter des balises d'objets à moins que vous ne les spécifiiez dans votre configuration.

Ma config finale est maintenant:

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

J'espère vraiment que ces instructions peuvent aider d'autres développeurs qui voudraient utiliser htmlpurifier. Comparé à ce que nous utilisions à l'origine pour nettoyer et récurer le texte entrant de notre éditeur wysiwyg, HTMLPurifier est environ 85% plus rapide!

+1

Comment obtenir une copie de la classe 'HTMLPurifier_Filter_SafeIframe'? – Sonny

+0

voir cette [question] (http://stackoverflow.com/questions/4739284/htmlpurifier-iframe-vimeo-and-youtube-video) – Piero

Questions connexes