2011-07-22 110 views
2

如何去除某些html標籤並允許其中的一些?strip_tags:去掉亂七八糟的標籤和樣式

例如,

我要脫光span標籤,但允許span用下劃線。

<span style="text-decoration: underline;">Text</span> 

我想允許p但我想刪除任何樣式或類p例如內,

<p class="99light">Text</p> p標籤裏面的類應除去 - 我只是想要一個乾淨的p標籤。

的是我到目前爲止線,

strip_tags($content, '<p><a><br><em><strong><ul><li>'); 
+1

使用DOM解析器。 – webbiedave

+0

http://htmlpurifier.org/ –

+1

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – naveen

回答

1

你不能。您需要使用XML/HTML解析器來執行此操作:

// with DOMDocument it might look something like this. 
$dom = new DOMDocument(); 
$dom->loadHTML($content); 
foreach($dom->getElementsByTagName("p") as $p) 
{ 
    // removes all attributes from a p tag. 
    /* 
    foreach($p->attributes as $attrib) 
    { 
     $p->removeAttributeNode($attrib); 
    } 
    */ 
    // remove only the style attribute. 
    $p->removeAttributeNode($p->getAttributeNode("style")); 
} 
echo $dom->saveHTML(); 
0

你需要完整的DOM解析。 strip_tags將不提供必要的安全性和定製。我過去爲此使用了HTMLPurifier庫。它實際解析並允許您設置白名單,同時照顧惡意輸入並生成有效標記! 「必要的安全性」我的意思是,如果你嘗試寫一個自定義的解析器,你會犯一個錯誤(不要擔心,我也會),通過「定製」我的意思是沒有內置的解決方案會讓你只針對某些具有某些屬性和這些屬性值的標籤。 HTMLPurifier是PHP庫解決方案。