首頁 PHP 函式庫 其它類別庫 htmlpurifierPHP過濾庫
htmlpurifierPHP過濾庫

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

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

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

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

建立HTMLPurifier物件並實作對富文本的過濾

$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的配置屬性可以透過其網站查詢到

配置屬性選擇

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

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

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

屬性值的選擇

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

#接著還會告訴你這個屬性的預設值,例如是NULL還是true還是false等。這個值的格式就跟PHP的格式一樣的。

白名單過濾機制

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

基本過濾範例

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);
……


免責聲明

本站所有資源皆由網友貢獻或各大下載網站轉載。請自行檢查軟體的完整性!本站所有資源僅供學習參考。請不要將它們用於商業目的。否則,一切後果都由您負責!如有侵權,請聯絡我們刪除。聯絡方式:admin@php.cn

相關文章

Go語言類別庫全知道:你不能錯過的重要類別庫 Go語言類別庫全知道:你不能錯過的重要類別庫

02 Mar 2024

對於Go語言開發者來說,選擇合適的類別庫是至關重要的。優秀的類別庫可以大幅提高開發效率,同時避免重複造輪子。在Go語言世界裡,有許多優秀的類別庫供我們選擇,但也有一些「必備」類別庫,今天我將為大家介紹一些在實際專案中我認為不容錯過的重要類別庫,並提供具體的程式碼範例供大家參考。 GorillaMux無論是建構RESTfulAPI或Web應用,路由是不可或缺的部分。

Revit過濾器設定規則時過濾條件新增不了的處理方法 Revit過濾器設定規則時過濾條件新增不了的處理方法

23 Apr 2024

建過濾器,設定過濾器規則,過濾條件沒辦法添加,點選【更多參數】還是添加不了是?兩個原因:一、沒有選擇類別。當沒有選擇任何類別時,沒法新增規則,因為規則不知道定義給誰;所以一定要先選擇類別再新增篩選規則。二、選擇的類別中沒有對應的參數值。若選擇了多個類別,必須確保這些類別中有一個共同的參數作為過濾條件,不然所選的的類別中沒有共性的地方怎麼將他們歸為一類,與其他圖元區分開來。

Java 8中的Optional類別:如何使用filter()方法過濾可能為空的值 Java 8中的Optional類別:如何使用filter()方法過濾可能為空的值

01 Aug 2023

Java8中的Optional類別:如何使用filter()方法過濾可能為空的值在Java8中,Optional類別是一個非常有用的工具,它允許我們更好地處理可能為空的值,避免了NullPointerException的發生。 Optional類別提供了許多方法來操作潛在的空值,其中一個重要的方法是filter()。 filter()方法的作用是,如果Option

如何使用 hbm2ddl.auto 透過 Hibernate 自動建立資料庫表? 如何使用 hbm2ddl.auto 透過 Hibernate 自動建立資料庫表?

15 Dec 2024

使用 Hibernate 自動建立/更新資料庫表格根據實體類別自動建立或更新資料庫表格...

Java Stream API Filter(過濾器) Java Stream API Filter(過濾器)

29 Aug 2023

透過滿足指定謂詞的流中的項目組成的流將由流過濾函數傳回。這是一個中間級操作。這些操作總是懶惰的,即運行過濾函數或其他中間操作實際上並不過濾任何內容;相反,它產生一個新的流,當遍歷時,包括滿足提供的謂詞的初始流的項目。語法Stream<T>filter(Predicate<?superT>predicate)當T是謂詞輸入的型別,並且stream是介面。傳回類型Anewstream.實施Eliminatingitemsthatmaybed

thinkphp如何修改資料庫 thinkphp如何修改資料庫

27 May 2023

一、ThinkPHP資料庫操作在ThinkPHP中,我們可以透過它提供的資料庫操作類別來進行資料庫的操作。常用的資料庫操作類別有:Db類別在ThinkPHP中,我們可以使用Db類別來進行對資料庫的增、刪、改、查等操作。其使用範例如下:

See all articles