php filter htmlpurifier

php - HtmlPurifier: permitir el atributo de datos



filter (1)

HTML Purifier conoce la estructura de HTML y utiliza este conocimiento como base de su proceso de inclusión en listas blancas. Si agrega un atributo estándar a una lista blanca, no permite contenido arbitrario para ese atributo: entiende el atributo y aún rechaza el contenido que no tiene sentido.

Por ejemplo, si tuviera un atributo en alguna parte que tomara valores numéricos, HTML Purifier aún negaría HTML que intentara ingresar el valor ''foo'' para ese atributo.

Si agrega atributos personalizados, simplemente agregarlo a la lista blanca no le enseña a HTML Purifier cómo manejar los atributos: ¿Qué datos puede esperar en esos atributos? ¿Qué datos son maliciosos?

Hay una extensa documentación sobre cómo puedes decirle a HTML Purifier acerca de la estructura de tus atributos personalizados aquí: Personalizar

Hay un ejemplo de código para el atributo ''objetivo'' de la etiqueta <a> :

$config = HTMLPurifier_Config::createDefault(); $config->set(''HTML.DefinitionID'', ''enduser-customize.html tutorial''); $config->set(''HTML.DefinitionRev'', 1); $config->set(''Cache.DefinitionImpl'', null); // remove this later! $def = $config->getHTMLDefinition(true); $def->addAttribute(''a'', ''target'', ''Enum#_blank,_self,_target,_top'');

Eso agregaría el target como un campo que solo acepta los valores "_blank" , "_self" , "_target" y "_top" . Eso es un poco más estricto que la definición de HTML real, pero para la mayoría de los propósitos es suficiente.

Ese es el enfoque general que deberá tomar para data-time-start y data-time-end . Para una posible configuración, consulte la documentación oficial de HTML Purifier (como se relacionó anteriormente). Lo mejor que puedo decir de tu ejemplo es que no quieres Enum#... pero Number , así ...

$def->addAttribute(''span'', ''data-time-start'', ''Number''); $def->addAttribute(''span'', ''data-time-end'', ''Number'');

... pero échale un vistazo y ve lo que mejor se adapta a tu caso de uso. (Mientras implementa esto, no olvide que también necesita enumerar los atributos en la lista blanca como lo hace actualmente).

Para id , debe incluir Attr.EnableID = true como parte de su configuración.

¡Espero que eso ayude!

Estoy tratando de permitir algún data-attribute con htmlPurifier para todo mi span pero de ninguna manera ...

Tengo esta cadena:

<p> <span data-time-start="1" data-time-end="5" id="5"> <word class="word">My</word> <word class="word">Name</word> </span> <span data-time-start="6" data-time-end="15" id="88"> <word class="word">Is</word> <word class="word">Zooboo</word> </span> <p>

Mi configuración htmlpurifier:

$this->HTMLpurifierConfigInverseTransform = /HTMLPurifier_Config::createDefault(); $this->HTMLpurifierConfigInverseTransform->set(''HTML.Allowed'', ''span,u,strong,em''); $this->HTMLpurifierConfigInverseTransform->set(''HTML.ForbiddenElements'', ''word,p''); $this->HTMLpurifierConfigInverseTransform->set(''CSS.AllowedProperties'', ''font-weight, font-style, text-decoration''); $this->HTMLpurifierConfigInverseTransform->set(''AutoFormat.RemoveEmpty'', true);

Purifico mi $value como este:

$purifier = new /HTMLPurifier($this->HTMLpurifierConfigInverseTransform); var_dump($purifier->purify($value));die;

Y consigue esto:

<span>My Name</span><span>Is Zoobo</span>

¿Pero cómo conservar mi id atributos de datos, data-time-start , data-time-end en mi span ?

Necesito tener esto:

<span data-time-start="1" data-time-end="5" id="5">My Name</span data-time-start="6" data-time-end="15" id="88"><span>Is Zoobo</span>

Traté de probar con esta configuración:

$this->HTMLpurifierConfigInverseTransform->set(''HTML.Allowed'', ''span[data-time-start],u,strong,em'');

pero mensaje de error:

Advertencia al usuario: No se admite el atributo ''data-time-start'' en el elemento ''span'' (para obtener información sobre cómo implementar esto, consulte los foros de soporte)

Gracias por tu ayuda !!

EDIT 1

Traté de permitir ID en el primer tiempo con esta línea de código:

$this->HTMLpurifierConfigInverseTransform->set(''Attr.EnableID'', true);

No funciona para mí ...

EDIT 2

Para los atributos data-* , agrego esta línea pero tampoco pasó nada ...

$def = $this->HTMLpurifierConfigInverseTransform->getHTMLDefinition(true); $def->addAttribute(''sub'', ''data-time-start'', ''CDATA''); $def->addAttribute(''sub'', ''data-time-end'', ''CDATA'');