2013-06-20 42 views
2

默認情況下,HTMLPurifier允許使用很多我不想允許的標籤。根據該文件,你必須添加這樣的定義:獲取HTMLPurifier 4.5只允許一個標籤

$config = HTMLPurifier_Config::createDefault(); 
if ($def = $config->maybeGetRawHTMLDefinition()) { 
    $def->addAttribute('a', 'target', new HTMLPurifier_AttrDef_Enum(array('_blank','_self','_target','_top'))); 
} 
$purifier = new HTMLPurifier($config); 

的問題是,我無法找到一個方法來去除來自HTMLPurifier_Config::createDefault();所有標籤。例如,<div>Sometext</div>將使用上述初始化代碼保持DIV標籤。

如何將HTMLPurifier設置爲僅允許<strong><a href="*"><p>

+0

我覺得HTMLPurifier可能已略高於架構。 – frodeborli

回答

3

你說:「根據文件,你必須添加像這樣的定義」。

,因爲我最後一次(一年前,約),檢查庫除非出現根本性的變化,這並不完全正確 - 這部分存在,如果你想教HTML過濾屬性,它不是本地意識到。例如,如果您想教您的HTML淨化器接受非標準<font>屬性(如align=""),則需要更改原始HTML定義。

但是,如果你的白名單純粹是由普通的HTML元素(!和你的一樣),你只需要使用$config對象:

$config = HTMLPurifier_Config::createDefault(); 
$config->set('HTML.AllowedElements', array(
    'strong','a','p' 
)); 
$config->set('HTML.AllowedAttributes', array(
    'a.href' 
)); 
$purifier = new HTMLPurifier($config); 

這應該工作。你是否遇到過這個星座的問題?

(看看這個文件,也:http://htmlpurifier.org/live/INSTALL

+0

謝謝。我之前做過類似的工作,但我認爲最近的版本已經改變了他們的API。 – frodeborli

-1

我發現的解決方案是使用舊的配置HTMLPurifier的方式;

if($def = $config->maybeGetRawHTMLDefinition()) { 
    $config->set('HTML.AllowedElements', array(
     'strong','a','p' 
    )); 
    $config->set('HTML.AllowedAttributes', array(
     'a.href' 
    )); 
} 

這是如何工作與HTMLDefinition我不知道。也許他們有一個兼容性層。

我最擔心的是,這不是使用返回的變量$def - 而且我對配置所做的更改沒有被緩存。

+0

我很困惑,爲什麼你那裏有那個'if';檢查http://htmlpurifier.org/live/INSTALL的結尾 - 您應該能夠在沒有原始HTML定義獲取的情況下設置這些配置值。 – pinkgothic