2010-01-30 48 views
1

我搜索了很多,因爲過去這些問題已經有很多問題了。但我沒有找到任何符合我需求的東西。PHP:從給定文本中過濾特定的html標籤

我有一個格式的HTML格式的文本。就像這樣:

Hey, I am just some kind of <strong>formatted</strong> text! 

現在,我想剝離所有html標籤,我不允許。 PHP的內置strip_tags()方法很好。

但我想更進一步:我想允許一些標籤只在裏面或不在其他標籤內。我也想定義我自己的XML標籤。

又如:

I am a custom xml tag: <book><strong>Hello!</strong></book>. Ok... <strong>Hi!</strong> 

現在,我想的<book/><strong/>被剝離,但<strong>Hi!</strong>可以保持它的方式。

所以,我想定義一些我允許或不允許的規則,並且希望剩下的任何過濾器都可以做。

有沒有簡單的方法可以做到這一點?正則表達式不是我正在尋找,因爲他們無法正確解析HTML。

問候,揚奧利弗

回答

1

使用第二個參數strip_tags的,這是允許的標籤。

$text = strip_tags($text, '<book><myxml:tag>'); 

我不認爲有一種方式,如果他們沒有其他的標籤內,不使用正則表達式來僅剝離某些標籤。

此外,正則表達式不是而不是擅長解析HTML,但與選項相比,速度較慢。但是,這不是你在這裏做的,反正。你正在閱讀字符串並刪除你不想要的東西。而對於你的複雜需求,我認爲你唯一的選擇是使用正則表達式。

說實話,我認爲你應該決定哪些標籤是允許的,哪些不是。無論他們是否在其他標籤內都不重要。這是標記,而不是腳本。

+0

正則表達式*很好*在*模式匹配*,但他們* *在*解析不好*。 – Gordon 2010-01-30 14:23:53

2

不要以爲有這樣的事情,我想即使HTML Purifier沒有這樣做。

我建議你使用類似Simple HTML Dom的東西來手動解析XHTML。

+0

這是我的第一個方法,但並不那麼容易,因爲我的輸入不是有效的xml格式。 – janoliver 2010-01-30 12:05:24

0

第二個參數顯示,您的CAL允許一些標籤:

string strip_tags (string $str [, string $allowable_tags ]) 

從php.net