2013-12-08 139 views
0

我想將標籤從我的WordPress feed中取出,但保留段落。PhP strip_tags:如何刪除包含某個屬性的標籤

strip_tags($content, '<p>'); 

這工作得很好,但我不希望保持與圖片說明涉及的段落...他們是這樣的:

<p class="wp-caption-text">blah blah blah</p>

所以,我怎麼帶,其持有的標籤,我們說,班級屬性?

所有幫助非常感謝。

+0

您的要求不能用'strip_tags'來完成,因爲PHP手冊中說過..'此函數不會修改您允許使用allowable_tags'的標籤上的任何屬性 –

+1

考慮改寫您的問題 - 您說的方式你的問題「我如何去掉標籤,讓我們說,類屬性」看起來實際上並不是你要求做的(也就是移除那個特定類的*元素)。 – brandonscript

+0

謝謝。最難的部分通常是問正確的問題:P –

回答

1

編輯:這實際上並不是OP想要的解決方案,但是回答了被問到的問題。


不幸的是,你不能直接用strip_tags做到這一點。

你可以使用DOM文檔,雖然,然後用strip_tags後:

$DOM = new DOMDocument(); 
$DOM->loadHTML($content); 
foreach($DOM->getElementsByTagName("p") as $p) 
{ 
    foreach($p->attributes as $attr) 
     $p->removeAttributeNode($attr); 
} 
$content = $DOM->saveHTML(); 

//Uncommenting this will then remove the tag as well. 
//$content = strip_tags($content, 'p'); 
+0

OP:「那麼,我該如何去除標籤,比如說類屬性呢?」這實際上並沒有達到 –

+1

@SamuelCook。錯誤地保留了OP代碼中的<>。 OP問題實際上是模棱兩可的 - 它指出「如何去掉標籤」,當它實際上應該閱讀「如何刪除特定類的元素」。 – brandonscript

+0

我改變了模棱兩可的標題:P但是,你知道我如何設置正確的編碼嗎?即我得到「 - 」而不是引號:( –

2

要做到這一點是使用一個DOM解析庫的最簡單方法。 DOMDocument內置於PHP,適用於DOM操作。 DOMXPath適合查詢。

$dom = new DOMDocument; 
$dom->loadHTML($yourHTML); 
$xpath = new DOMXPath($dom); 
foreach ($xpath->query("//*[not(p)]|.wp-caption-text") as $node) { 
    $node->parentNode->removeChild($node); 
} 

請注意,這也是strip_tags的工作。

+0

很酷,我會試試看,我對DOM解析很陌生,但我想我會只要我更好地掌握它,就開始重新修復我所有討厭的正則表達式,但非常感謝! –