2012-12-15 59 views
0

我有一些非常雜亂的HTML,其中有很多span和其他標籤。僅顯示一些帶有strip_tags的內聯樣式()

我試圖只保留<span style="font-weight: bold">而刪除其他這樣的span標籤。

我有這個至今:

$content = strip_tags($content, '<br>,<quote>,<code>,<pre>,<ul>,<li>,<ol>,<span>'); 

我想刪除<span>因爲它增加了全球所有其他span S,我只是想span s的在他們font-style。我怎樣才能做到這一點?

+2

我會建議使用DOM解析器,[PHPQuery](http://code.google.com/p/phpquery/)在這個特定練習中可以很好地工作。或者通過一個無頭瀏覽器(是否有一個用於PHP?)或者通過一個帶有一些JS的實際瀏覽器運行它,這些瀏覽器在過濾之後捕獲內容。 –

回答

2

strip_tags不能這樣做。請參閱HTML Purifier。它的設計正是爲了這個用例。你可以給它一個允許的標籤和屬性的白名單。它也有基本的CSS解析,允許你whitelist and blacklist CSS properties

在這種情況下,你可能會做這樣的事情:

// This has not been tested, but should work 
$configuration->set('HTML.Allowed', 'br,quote,code,pre,ul,li,ol,span[style]'); 
$configuration->set('CSS.AllowedProperties', 'font-weight'); 

現在,你還是會留下一些額外的span標籤。你建議你只是想讓他們離開。這將會有點棘手。您想使用DOM操作工具來查找每個無用的跨度,捕獲內容,刪除跨度,然後插入跨度所在的內容。已經指出phpQuerySimple HTML DOM也應該這樣做。 PHP自己的DOM extension也可以做到這一點,但這將是太多更多的熊。