我目前在評論系統中使用Zend_Filter_StripTags,但是當'< 3'被輸入時東西有點破壞。 StripTags似乎沒有足夠的智能來認識到它不是一個HTML標籤,並且將過濾器創建爲「新的Zend_Filter_StripTags(array('3'))」似乎也不起作用。Zend框架篩選器輸入StripTags和「<3」
我應該首先通過正則表達式傳遞輸入,還是有辦法讓Zend_Filter_StripTags伸直並向右飛?
我目前在評論系統中使用Zend_Filter_StripTags,但是當'< 3'被輸入時東西有點破壞。 StripTags似乎沒有足夠的智能來認識到它不是一個HTML標籤,並且將過濾器創建爲「新的Zend_Filter_StripTags(array('3'))」似乎也不起作用。Zend框架篩選器輸入StripTags和「<3」
我應該首先通過正則表達式傳遞輸入,還是有辦法讓Zend_Filter_StripTags伸直並向右飛?
完成了一個基本上是HTMLPurifier的包裝的Zend_Filter類。完美的作品,因爲HTMLPurifier比striptags更智能。
我對Zend不太熟悉,但是如果你想要像<3
這樣的東西被允許,只需做htmlspecialchars
而不是strip_tags
就可以了。
你想要的是最有可能的Zend_Filter_HtmlEntites。
與用htmlspecialchars和Zend_Filter_HtmlEntities來的問題是,如果你想去掉所有的HTML標籤(如「a」和「IMG」等),然後,而不是剝奪他們,你在輸出中結束該標記。
例如在博客上發表評論。如果您使用htmlspecialchars或Zend_Filter_HtmlEntities,在某人嘗試使用html輸入鏈接的註釋中,最終顯示評論時顯示該標記。但是,如果使用strip_tags或Zend_Filter_StripTag,則最終會損壞評論,因爲它們都不足以識別'< 3'不是標籤,而是從'< 3'直到評論結束(或直到它找到'>')。
如果Zend有類似於HTMLPurifier的東西,它會在剝離標籤之前實際檢查並驗證輸入。這意味着諸如'< 3'之類的內容會被單獨留下,像'Awesome Site'這樣的內容會變成'Awesome Site'。
這是一個問題,我正在努力解決,目前看來我最終會編寫自己的Zend_Filter類,它基本上是HTMLPurifier的一個包裝。
你有沒有考慮過濾,而只是將可能有害的字符轉換爲HTML實體(PHP中的htmlspecialchars())? – 2009-02-13 01:26:21
strip_tags()(或其ZF包裝器)更適合用於從已經過清理的HTML片斷中獲取純文本內容。對於你正在做的事情(上下文敏感的HTML解析),需要更多的努力。 – flussence 2009-02-13 01:32:27