【问题标题】:Allow classes with a certain prefix in HTMLPurifier在 HTMLPurifier 中允许具有特定前缀的类
【发布时间】:2014-09-10 12:41:51
【问题描述】:

是否可以将 HTMLPurifier 配置为允许所有具有特定前缀的类?例如,我正在使用 FontAwesome,并希望让用户能够使用其图标,但数组中的图标太多,无法合理地硬编码。

这是我想做的,但它不会这样工作:

$config = HTMLPurifier_Config::createDefault() ;
$config->set('Attr.AllowedClasses', array('fa', 'fa-*')) ;

我找到了this example,这表明它是可能的,但是该页面上的代码实际上并没有像宣传的那样做,而且有些部分在我看来是错误的。据我了解,它只允许带有target 属性的a 标签,但不允许带有class 属性的标签,即使它应该检查前缀类。

【问题讨论】:

  • 嗯。看看这个问题及其答案是否对您有帮助? stackoverflow.com/questions/2638640/… - 它更进一步,但当我只想处理属性时,我总是将其作为备忘单返回。 (参见“参考点:处理属性”)

标签: php htmlpurifier


【解决方案1】:

使用问题中链接中的示例作为基础,我设法将这个解决方案组合在一起。它似乎像一个魅力。它仅限于基于每个元素,但这实际上对我的目的非常有用。

我不知道这是否是最好的解决方案,但它对我有用。

class CustomClassDef extends HTMLPurifier_AttrDef {
    private $classes, $prefixes ;

    public function __construct($classes, $prefixes) {
        $this->classes = $classes ;
        $this->prefixes = is_array($prefixes) ? join('|', $prefixes) : $prefixes ;
    }

    public function validate($string, $config, $context) {
        $classes = preg_split('/\s+/', $string) ;
        $validclasses = array() ;

        foreach ($classes as $class) {
            if (in_array($class, $this->classes) or
                preg_match("/^({$this->prefixes})/i", $class)) {

                $validclasses[] = $class ;
            }
        }

        return join(' ', $validclasses) ;
    }
}

$config = HTMLPurifier_Config::createDefault() ;
// Allow no classes by default
$config->set('Attr.AllowedClasses', array()) ;

$def = $config->getHTMLDefinition(true) ;
// Allow the class 'fa', and classes prefixed 'fa-' or 'foo-', on i tags
$def->addAttribute('i', 'class', new CustomClassDef(array('fa'), array('fa-', 'foo-'))) ;

// Allow classes prefixed 'language-' on code tags
$def->addAttribute('code', 'class', new CustomClassDef(array(), 'language-')) ;

$purifier = new HTMLPurifier($config) ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多