htmlочиститель с borderRadius

Как разрешить borderRadius с помощью htmlpurifier?

Я нашел это, но, похоже, он не работает с текущей версией htmlpurifier, возможно, они изменили способ добавления собственного CSS?

http://htmlpurifier.org/phorum/read.php?2,6154,6154

  $config = HTMLPurifier_Config::createDefault();

  // add some custom CSS3 properties                                                                                                                                              
  $css_definition = $config->getDefinition('CSS');

  $border_radius =
    $info['border-top-left-radius'] =
    $info['border-top-right-radius'] =
    $info['border-bottom-left-radius'] =
    $info['border-bottom-right-radius'] =
    new HTMLPurifier_AttrDef_CSS_Composite(array(
                                             new HTMLPurifier_AttrDef_CSS_Length('0'),
                                             new HTMLPurifier_AttrDef_CSS_Percentage(true)
                                             ));

  $info['border-radius'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_radius);

  // wrap all new attr-defs with decorator that handles !important                                                                                                                
  $allow_important = $config->get('CSS.AllowImportant');
  foreach ($info as $k => $v) {
    $css_definition->info[$k] = new HTMLPurifier_AttrDef_CSS_ImportantDecorator($v, $allow_important);
  }

  $html_purifier = new HTMLPurifier($config);

person Matt Welander    schedule 05.07.2013    source источник


Ответы (2)


Я разветвил оригинальное репо и добавил функциональность для радиуса границы в функции очистки, код можно найти здесь.

https://github.com/msvensson82/htmlочиститель

Я просто добавил это в файл CSSDefinition.php, если вы хотите изменить свой, а не получать мой репозиторий.

// border-radius
$border_radius =
$this->info['border-top-left-radius'] =
$this->info['border-top-right-radius'] =
$this->info['border-bottom-left-radius'] =
$this->info['border-bottom-right-radius'] = new HTMLPurifier_AttrDef_CSS_Composite(array(
 new HTMLPurifier_AttrDef_CSS_Length('0'),
 new HTMLPurifier_AttrDef_CSS_Percentage(true)
));
$this->info['border-radius'] = new HTMLPurifier_AttrDef_CSS_Multiple($border_radius);
person Matt Welander    schedule 06.08.2013

По состоянию на 2016 этого можно добиться, включив параметр CSS.Proprietary:

use HTMLPurifier;
use HTMLPurifier_Config;

$input = '<div style="border: 2px solid; border-radius: 10px;">Hello world!</div>';

$config = HTMLPurifier_Config::createDefault();
// Enable "proprietary" css properties to allow use of `border-radius`
$config->set('CSS.Proprietary', true);

$purifier = new HTMLPurifier($config);

echo $hp_purifier->purify($input);
// => <div style="border:2px solid;border-radius:10px;">Hello world!</div>

Это позволяет использовать border-radius, а также отдельные свойства border-top-left-radius, border-top-right-radius, border-bottom-right-radius и border-bottom-left-radius.

Включение проприетарных свойств CSS также включает несколько других properties, но кроме свойства filter (которое, по-видимому, в настоящее время поддерживает только фильтр непрозрачности), я не думаю, что когда-либо видел какое-либо из них в использовании раньше.

person Wychmire    schedule 11.01.2021