2013-05-03 50 views
0

是否可以採用下面的原始代碼,並將其包裝在一個新類中,以便我可以簡單地創建$filter = new myPurifier();然後使用$output = $filter->purify($input);?在這篇文章的底部,你會看到我失敗的嘗試。由於將htmlpurifier擴展爲個人配置

原代碼:

include_once('htmlpurifier/library/HTMLPurifier.auto.php'); 

$config = HTMLPurifier_Config::createDefault(); 
$config->set('Core', 'Encoding', 'UTF-8'); 
$config->set('HTML', 'Doctype', 'HTML 4.01 Transitional'); 

if (defined('PURIFIER_CACHE')) { 
    $config->set('Cache', 'SerializerPath', PURIFIER_CACHE); 
} else { 
    # Disable the cache entirely 
    $config->set('Cache', 'DefinitionImpl', null); 
} 

# Help out the Purifier a bit, until it develops this functionality 
while (($cleaner = preg_replace('!<(em|strong)>(\s*)</\1>!', '$2', $input)) != $input) { 
    $input = $cleaner; 
} 

$filter = new HTMLPurifier($config); 
$output = $filter->purify($input); 

參考:上面的代碼在PHP - HTML Purifier - hello w<o>rld/world tutorial striptags

我嘗試這樣做,發現不工作:

class myhtmlpurifier extends HTMLPurifier 
{ 
    public function __construct() 
    { 
     require_once VS_APPLICATION_BASE.DS.'classes_3rd/htmlpurifier-4.4.0/library/HTMLPurifier.auto.php'; 
     $config = HTMLPurifier_Config::createDefault(); 
     $config->set('Core', 'Encoding', 'UTF-8'); 
     $config->set('HTML', 'Doctype', 'HTML 4.01 Transitional'); 
     if (defined('PURIFIER_CACHE')) { 
      $config->set('Cache', 'SerializerPath', PURIFIER_CACHE); 
     } else { 
      # Disable the cache entirely 
      $config->set('Cache', 'DefinitionImpl', null); 
     } 

     # Help out the Purifier a bit, until it develops this functionality 
     while (($cleaner = preg_replace('!<(em|strong)>(\s*)</\1>!', '$2', $input)) != $input) { 
      $input = $cleaner; 
     } 
     $this = parent::__construct($config); 
    } 
} 

回答

1

有一兩件事情錯了與您的嘗試:

  • 嘗試包括你從構造
  • 引用一個未定義的$input變量繼承類來幫助清理有害內容

爲了實現你想要什麼,你應該移動要求外,並移動while循環爲purify方法的重載版本。