2016-07-05 59 views
1

如何使用HTML淨化器允許元素?如何使用HTML Purifier允許<audio>元素?

我已經試過$config->set('HTML.Allowed', 'audio');,但現在它會刪除所有其他元素,包括<p>, <br>

我又試圖$def->addAttribute('audio', 'src', 'CDATA');但它不工作。

+0

「這是行不通的」不是一個很好描述的問題,我建議添加更多信息。 – peterh

回答

1

HTML.Allowed是所有允許標籤的白名單,所以你可能想要做的就是串聯$config->get('HTML.Allowed'),audio作爲值。

也就是說,HTML Purifier的安全方法是HTML風格識別 - 而不僅僅是白名單標記和屬性,它還可以確保標記在它們所處的上下文中是有意義的,並且屬性值看起來像預期的那樣意味着它必須實際上瞭解您提供它的HTML定義。例如,您不希望嵌入<div>標籤中的<td>標籤,這是沒有意義的;而且你不想在你的HTML中使用width="foo",這也沒有意義。

因爲據我所知,HTML Purifier仍然不知道它圍繞HTML5的方式,<audio>標籤可能不是它本質上意識到的。您必須查看"Customize!" end-user documentation,它會告訴您如何添加HTML Purifier不知道的標記和屬性。

要鏈接的文件引用的最生動的代碼示例(此代碼講授的<form>標記HTML淨化器):

時間的一些代碼:

$config = HTMLPurifier_Config::createDefault(); 
$config->set('HTML.DefinitionID', 'enduser-customize.html tutorial'); 
$config->set('HTML.DefinitionRev', 1); 
$config->set('Cache.DefinitionImpl', null); // remove this later! 
$def = $config->getHTMLDefinition(true); 
[...] 
$form = $def->addElement(
    'form', // name 
    'Block', // content set 
    'Flow', // allowed children 
    'Common', // attribute collection 
    array(// attributes 
     'action*' => 'URI', 
     'method' => 'Enum#get|post', 
     'name' => 'ID' 
    ) 
); 
$form->excludes = array('form' => true); 

每個參數對應的到我們問的其中一個問題。請注意,我們在action屬性的末尾添加了一個星號以表明它是必需的。如果某人指定了一個沒有該屬性的表單,該標籤將被刪除。另外,最後的額外行是一個特殊的額外聲明,它可以防止表單互相嵌套。

一旦你遵循這些說明,使您的日常淨化意識到<audio>,添加標籤<audio>到您的配置白名單會工作。

相關問題