2014-07-19 3 views
0

HTMLPurifier를 구성하여 특정 접두사가있는 모든 클래스를 허용 할 수 있습니까? 예를 들어, FontAwesome을 사용하고 있으며 사용자에게 아이콘을 사용할 수있는 기능을 제공하고자하지만 너무 많아 배열에 하드 코딩 할 수 없습니다. HTMLPurifier의 특정 접두사가있는 클래스 허용

는 내가하고 싶은 것입니다,하지만 이런 식으로 작동하지 않습니다 내가 this example을 발견

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

, 그것이 가능하다는 것을 알 수 있지만, 해당 페이지의 코드는하지 않습니다 실제로 광고 된 것처럼 보이고 일부 부품이 나에게 보이지 않습니다. 내가 이해할 수있는 바로는 a 태그는 target 속성 만 허용하지만 class 속성은 허용하지 않는 속성입니다 (접두사가 붙은 클래스를 확인한다고해도).

+0

흠. 이 질문과 답변이 도움이되는지 확인하십시오. http://stackoverflow.com/questions/2638640/html-purifier-removing-an-element-conditionally-based-on-its-attributes- 더 나아가지만, 나는 항상 치트 시트로 돌아 간다. 나는 속성을 처리하기를 원한다. ("참조 지점 : 속성 처리"참조) – pinkgothic

답변

0

문제의 링크에있는 예를 기반으로이 솔루션을 해킹 할 수있었습니다. 그것은 매력처럼 작동하는 것 같습니다. 그것은 요소 단위로 제한되어 있지만 실제로는 내 목적에 적합합니다.

이것이 최선의 해결책인지는 잘 모르겠지만 나에게 도움이됩니다.

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) ; 
관련 문제