回答
一个相当幼稚的正则表达式可能会为你工作
$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标签的标签在php中
- 2. 使用BeautifulSoup显示p标签内的所有b标签
- 3. p标签没有更新
- 4. get_the_excerpt()删除页面中的所有p标签
- 5. 闪亮的条件面板显示所有标签上的所有条件
- 6. 如何在html页面中获取所有p和h标签的值,但不包括所有其他标签
- 7. 一个p标签
- 8. wordpress missing P标签
- 9. 删除所有span标签与特定的类从使用Javascript
- 10. 的JavaScript ONSELECT为p标签
- 11. p标签中的CSS
- 12. p标签中的段落
- 13. WordPress的空p标签
- 14. 删除空p标签和转换等p标签到\ n
- 15. XHTML严格:br标签内p标签
- 16. ContextMenu.js标签显示所有菜单项的最后一个条目的标签
- 17. BeautifulSoup 4:选择至少有一个具有特定类别的儿童p标签的所有div
- 18. jQuery的addClass所有标签
- 19. 在所有的jQuery标签
- 20. XSL替换P标签
- 21. P标签文字包装
- 22. 设定值p标签
- 23. 寻找一个替换p标签和两个p标签的jQuery
- 24. 类似is_term的wordpress条件标签
- 25. 使用Javascript将所有span标签更改为标签标签?
- 26. jQuery选择器需要选择表格行中的所有'p'标签
- 27. 如何获得p标签的所有文字,除了最后与htmlagilitypack
- 28. 如何使用jQuery逐个淡入页面中的所有p标签内容?
- 29. 如何从$('p')集合中删除所有类?
- 30. 替换所有标签
非常感谢,像一个魅力的作品:) – SoulieBaby 2009-07-23 10:43:54
该代码是否可以处理大写/小写,单/双/不加引号,空格之间,空格之前和之后的类? – 2009-07-23 11:17:22
否 - 仅限OP所指示的情况。其他任何东西都留给读者练习:) – 2009-07-23 12:45:33