2010-08-10 20 views
1

我已經在客戶端的網站上安裝了CKeditor,允許他們使用所見即所得的編輯器輸入一些文本。它被鎖定在大多數情況下,只允許粗體,斜體,無序列表等如何使用PHP刪除「空白標記」 - 即多個沒有文本節點的嵌套元素

我也貫穿HTML purifier用戶提交的HTML,以確保他們沒有得到智能並開始嘗試添加表, 例如。例如,限制他們可以輸入的XSS問題也是一個好主意。

我只是看了一些由CKEDITOR/HTML淨化器組合產生的輸出,而看到這一暴行......

<p> 
    <span style="font-size:11px;"><br /></span></p> 

反正我有可以配置HTML淨化器或用別的刪除元素沒有文本節點?顯然需要從最新的後代開始,然後運行DOM樹,刪除沒有包含文本節點元素的大多數父代。

這種方法是否存在任何邊緣情況,假設該標記中從未有任何表示性元素?沒有自我關閉的元素會出現,我可以想到(例如圖像,輸入元素等)。

+1

不容易;特別是很難判斷是否應該刪除br標籤。 – 2010-08-10 17:02:03

回答

0

您可以使用PHP的strip_tags()功能:

http://de3.php.net/manual/en/function.strip-tags.php

這將刪除所有的HTML標籤,除非你作爲謝勝利,輸入參數的人。在你的情況下,允許粗體,斜體和無序LIS只有這將是:

$text = strip_tags($text, '<b><i><ul>'); 

當然還有可能在此之後空的,但你一定能擺脫spanp標籤與此的。