PHP下富文本HTML過濾器:HTMLPurifier使用教程

一、如何在程序中調用HTMLPurifier

1、一般性調用

根據官方的文檔中,我們可以要在PHP程序中調用HTMLPurifier,需要先將HTMLPurifier.auto.php引入到程序文件中,具體方法如下:

require_once '/path/to/HTMLPurifier.auto.php';

2、將HTMLPurifier整合到ThinkPHP中

根據ThinkPHP的規範,對於第三方擴展,不符合ThinkPHP開發規範的,需要將HTMLPurifier放入到Library/Vendor目錄中。然後我們可以在方法中通過下面方法將HTMLPurifier.auto.php引入到框架程序中:

vendor('htmlpurifier.library.HTMLPurifier#auto');

不過這裏我使用的ThinkPHP 3.2.1,發現這種方法只能使用在函數中,對於控制器類中這樣引入是無法正確識別的。也就是說,我們只能在common/function.php文件中引用。

二、創建HTMLPurifier對象並實現對富文本的過濾

官方文檔已經給出了基本的創建方法,即使說先需要一個配置類Config,然後使用配置類對象來生成Purifier對象。然後調用purifier方法對需要過濾的文本進行過濾。代碼如下:

$config = HTMLPurifier_Config::createDefault();
$purifier new HTMLPurifier($config);
$clean_html $purifier->purify($dirty_html);

三、如何對HTMLPurifer的過濾器進行配置

要使用HTMLPurifier,重點還是在如何進行配置。對於上面的程序,我們通過createDefault()方法創建了一個默認的配置對象。我們如果要修改配置的話,可以通過set方法來進行配置設置,方法如下:

$config->set('config_object', value, a=null);

第一個參數就是需要配置的屬性,第二個參數就是屬性的值,第三個參數具體是做什麼用的我也還沒有搞明白,不過一般都沒有用過,等有時間了再慢慢兒來研究研究。

HTMLPurifier的配置屬性可以通過其網站查詢到:http://htmlpurifier.org/live/configdoc/plain.html

1、配置屬性選擇

HTMLPurifier的配置文檔主要是兩級分類,大類分Attr(屬性)、HTML(html標籤)、AutoFormat(自動格式)、CSS(css配置)、Output(輸出配置)……小類選擇通過大類名稱加.加小類名稱可以完成。

比如我要配置允許的html標籤,比如說p標籤和a標籤,可以如下配置

$config->set('HTML.Allowed''p,a');

2、屬性值的選擇

在官方文檔中,點擊一個屬性後,可以看到對這個屬性的解釋,會告訴你這個屬性的值的類型(Type)是String、Int、Array、Boolen……

接着還會告訴你這個屬性的默認值,比如是NULL還是true還是false等。這個值的格式就跟PHP的格式一樣的。

3、白名單過濾機制

HTMLPurifier使用了白名單過濾機制,只有被設置允許的纔會通過檢驗。

4、基本過濾事例

a、過濾掉文本中的所有html標籤

/**
 * 過濾掉所有html標籤很簡單,原因則在白名單機制完成
 */
$config->set('HTML.Allowed''');

b、保留超鏈接標籤a及其href鏈接地址屬性,並自動添加target屬性值爲’_blank’

$config->set('HTML.Allowed''a[href]');
$config->set('HTML.TargetBlank', true);

c、自動完成段落代碼並清除掉無用的空標籤

// 讓文本自動添加段落標籤,前提是必須允許P標籤的使用
$config->set('HTML.Allowed''p');
$config->set('AutoFormat.AutoParagraph', true);
// 清除空標籤
$config->set('AutoFormat.RemoveEmpty', true);

……

當然了,HTMLPurifier的過濾功能非常強大的,每一個點都要寫到那也不現實,這裏主要還是要說明如何寫配置,只有配置好了才知道如何去拓展!

轉自 http://www.xcoder.cn/index.php/archives/971

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章