回答
一個相當幼稚的正則表達式可能會爲你工作
$html=preg_replace('/class=".*?"/', '', $html);
我說天真,因爲如果你的身體文本碰巧包含class =「something」出於某種原因它會失敗!如果需要的話,可以通過在角標托架標籤內查找class =「」來使它更加健壯。
我會在jQuery上做這樣的事情。將其放置在頁面頁眉中:
$(document).ready(function(){
$(p).each(function(){
$(this).removeAttr("class");
//or $(this).removeclass("className");
})
});
也許這是你需要有點大材小用,但是,解析/驗證/潔淨HTML數據,最好的工具,我所知道的是HTML Purifier
它允許您定義的標籤,以及哪些屬性,都行;和/或哪些不是;並提供有效的/ clean(X)HTML作爲輸出。
(使用正則表達式來「解析」 HTML似乎的OK開始......然後,當你想添加特定的東西,它通常變成地獄理解/維護)
您加載HTML到DOMDocument類中,將其加載到simpleXML中。然後,對所有p元素執行XPath查詢,然後遍歷它們。在每個循環中,將類屬性重命名爲「killmeplease」。
完成後,將simpleXML重新輸出爲XML(順便說一句,可能會更改HTML,但通常只會更好),並且您將擁有一個HTML字符串,其中每個p都有一個「killmeplease」類。使用str_replace實際刪除它們。
例子:
$html_file = "somehtmlfile.html";
$dom = new DOMDocument();
$dom->loadHTMLFile($html_file);
$xml = simplexml_import_dom($dom);
$paragraphs = $xml->xpath("//p");
foreach($paragraphs as $paragraph) {
$paragraph['class'] = "killmeplease";
}
$new_html = $xml->asXML();
$better_html = str_replace('class="killmeplease"', "", $new_html);
或者,如果你想使代碼更簡單,但用了preg_replace糾結,你可以一起去:
$html_file = "somehtmlfile.html";
$html_string = file_get_contents($html_file);
$bad_p_class = "/(<p).*(class=.*)(\s.*>)/";
$better_html = preg_replace($bad_p_class, '$1 $3', $html_string);
最棘手的部分用正則表達式是他們往往如果你的p元素標籤中有一個換行符,那麼貪婪並試圖關閉它可能會導致問題。但給那些一個鏡頭。
HTML過濾
HTML可以是非常棘手的,因爲數百種不同的方式可以編寫代碼或格式化,以正則表達式。
HTML purifier是一個成熟的清理HTML的開源庫。我會建議在這種情況下使用它。
在HTML淨化器的配置文檔中,您可以指定應該允許的類和屬性以及淨化器在發現它們時應該執行的操作。
$html = "<p id='fine' class='r3e1 b4d 1' style='widows: inherit;'>";
preg_replace('/\sclass=[\'|"][^\'"]+[\'|"]/', '', $html);
如果你正在投入對微軟Office的出口HTML的測試,你需要比類去除但HTML Tidy更加剛剛爲Microsoft Office config flag!
否則,這應該是比其他答案更安全,因爲他們有點貪婪,你不知道將使用什麼樣的封裝('
或"
)。
注:模式實際上是/\sclass=['|"][^'"]+['|"]/
但是,因爲有兩個引號("
)撇號('
),我不得不逃離一個(\'
)所有出現的封裝模式。
- 1. 刪除所有空p標籤
- 2. 使用BeautifulSoup顯示p標籤內的所有b標籤
- 3. 刪除所有不匹配p標籤的標籤在php中
- 4. 具有p標籤不推其他類
- 5. 的Javascript:替換DIV的所有p標籤(沒有任何庫)
- 6. p標籤沒有更新
- 7. 顯示所有條目標籤
- 8. 使用JSoup檢索p標籤之間的所有html
- 9. jQuery - 將所有解包的文本包裝在p標籤中
- 10. get_the_excerpt()刪除頁面中的所有p標籤
- 11. 閃亮的條件面板顯示所有標籤上的所有條件
- 12. 如何在html頁面中獲取所有p和h標籤的值,但不包括所有其他標籤
- 13. 刪除從文本/字符串的所有「BR」和「p」標籤在PHP
- 14. JavaScript的JScrollPane沒有P標籤
- 15. 從WordPress中的對象標籤中移除p標籤
- 16. 對準p標籤
- 17. 一個p標籤
- 18. wordpress missing P標籤
- 19. 如何使用jQuery選擇所有空p標籤?
- 20. 刪除所有span標籤與特定的類從使用Javascript
- 21. WordPress的空p標籤
- 22. p標籤中的CSS
- 23. p標籤中的段落
- 24. 的JavaScript ONSELECT爲p標籤
- 25. 刪除空p標籤和轉換等p標籤到\ n
- 26. XHTML嚴格:br標籤內p標籤
- 27. Neo4j的:所有的標籤
- 28. ContextMenu.js標籤顯示所有菜單項的最後一個條目的標籤
- 29. BeautifulSoup 4:選擇至少有一個具有特定類別的兒童p標籤的所有div
- 30. jQuery的addClass所有標籤
非常感謝,像一個魅力的作品:) – SoulieBaby 2009-07-23 10:43:54
該代碼是否可以處理大寫/小寫,單/雙/不加引號,空格之間,空格之前和之後的類? – 2009-07-23 11:17:22
否 - 僅限OP所指示的情況。其他任何東西都留給讀者練習:) – 2009-07-23 12:45:33