2010-11-09 6 views
6

Esto es una especie de combinación especial de etiquetas que quiero permitir en HTMLPurifier, pero parece que la combinación no funciona.¿Cómo se permiten las etiquetas script, object, param, embed e iframe en HTMLPurifier?

puedo conseguir etiquetas de script para trabajar, pero luego incrustar etiquetas se eliminan (puedo activar las etiquetas de script con HTML.Trusted = true). Cuando vuelvo a incorporar las etiquetas, las etiquetas de script se eliminan (elimino HTML.Trusted). Lo que sigue es mi config:

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

Incluso he intentado añadir en los siguientes elementos que empeoró las cosas:

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

Además, me parece que no puede conseguir marcos flotantes para trabajar no importa qué. He intentado añadir:

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

Cualquier ayuda en conseguir todo el combo para trabajar, o incluso etiquetas de script con objeto/param y embed sería muy apreciada !!!

Oh sí, esto no es, obviamente, para todos los usuarios, sólo los usuarios "especiales".

Gracias!

PS - por favor no me enlazar a http://htmlpurifier.org/docs/enduser-customize.html


ACTUALIZACIÓN

he encontrado una solución para añadir marcos flotantes en la parte inferior de la rosca aquí: http://htmlpurifier.org/phorum/read.php?3,4646

La corriente configuración es ahora:

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

ACTUALIZACIÓN DE LA ACTUALIZACIÓN

Si usted está teniendo problemas con mi comentario en el foro HTMLPurifier, puede deberse a que me refiero para el método a tener este aspecto:

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

"No utilizar HTML Purifier". :-) –

+0

HTML Purificador de rocas! ¿Por qué no querría usarlo? ;) – shmuel613

+0

Para ser realmente correcto, probablemente debería extender 'HTMLPurifier_Filter'. La solución es genial; Estoy usando esto, pero los dominios de la lista blanca en los que confío (por ejemplo, la nueva incrustación iframe de youtube). –

Respuesta

5

Encontré la solución a través del grupo HTMLPurifier Google (gracias Edward Z. Yang !!!). La solución para permitir que las etiquetas de objeto, incrustación y script existan en la página al mismo tiempo es QUITAR "objeto" de la matriz $ common en el método HTMLModuleManager.php __construct(). Por supuesto, esto hará que nadie pueda agregar etiquetas de objeto a menos que lo especifique en su configuración.

Mi configuración final es ahora:

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

Realmente espero que estas instrucciones pueden ayudar a otros desarrolladores que deseen utilizar HTMLPurifier. En comparación con lo que estábamos usando originalmente para limpiar y eliminar el texto entrante de nuestro editor wysiwyg, HTMLPurifier es aproximadamente un 85% más rápido.

+1

¿Cómo obtengo una copia de la clase 'HTMLPurifier_Filter_SafeIframe'? – Sonny

+0

vea esta [pregunta] (http://stackoverflow.com/questions/4739284/htmlpurifier-iframe-vimeo-and-youtube-video) – Piero

Cuestiones relacionadas