我想接受來自用戶的html輸入並將其發佈到我的網站上,同時也希望確保它不會因爲html代碼而導致我的網站模板出現問題。html淨化器的替代方案
我以前使用的是HTML淨化器,但Html淨化器不能在我的一臺服務器上工作。所以我正在尋找最佳選擇。 這是純粹用PHP編寫的。 可以解決像
</div> it is dirty code as div is closed without opening.
我想接受來自用戶的html輸入並將其發佈到我的網站上,同時也希望確保它不會因爲html代碼而導致我的網站模板出現問題。html淨化器的替代方案
我以前使用的是HTML淨化器,但Html淨化器不能在我的一臺服務器上工作。所以我正在尋找最佳選擇。 這是純粹用PHP編寫的。 可以解決像
</div> it is dirty code as div is closed without opening.
骯髒的HTML代碼,你可以嘗試PHP Tidy,這是在PHP整潔庫。
我相信Tidy會幫你關閉你的標籤,但它不像HTML Purifier那樣全面,它可以刪除有效但不需要的標籤或屬性(即JavaScript onclick事件,類似的東西)。
請注意,Tidy需要在您的服務器上安裝libtidy,所以它不僅僅是直接的PHP。
我知道帕德里克·布雷迪一直致力於研究替代HTML淨化器Zend框架,但我認爲它只是實驗代碼此時
http://framework.zend.com/wiki/pages/viewpage.action?pageId=25002168
我試過了。但它有很多錯誤。 – 2010-10-28 23:25:25
恥辱。我建議要麼嘗試讓HTML Purifier工作,要麼嘗試Tidy。 – simonrjones 2010-10-30 20:34:01
但我想嘗試一下。所以試過了,所以告訴你對此的迴應。 – 2010-11-07 16:59:47
簡單的解決方案,而三階第三方庫:創建一個DOMDocument
並在您的輸入上調用loadHTML
。如果僅解析一小段代碼,則將輸入與<html>
和<body>
標記包圍。你可能也想壓制警告,因爲你會讓它們吐出一些常見的不良HTML。
然後簡單地遍歷生成的文檔樹,刪除沒有包含在已知好的列表中的任何元素和屬性。您還應該檢查允許的URL屬性,以確保它們使用已知好的方案,如http:
,而不是像javascript:
這樣的潛在麻煩方案。如果你想多花一點時間,你可以檢查只有允許的元素組合嵌套在一起(這更容易讓你允許的元素數量更少)。
最後,使用saveHTML
再次將片段的節點序列化。因爲您是從DOM創建新的標記,而不是保留原始的可能格式不正確的標記,所以這是您阻止的一類奇怪的標記注入技術。
我想它應該。查看安裝頁面,它說這個模塊捆綁了PHP> = 5。 – 2010-10-28 23:11:45
謝謝。我正在尋找它 – 2015-06-18 03:41:40