删除除div类之外的所有html标记和内容

时间:2011-01-09 06:30:18

标签: php html regex dom

除了div类之外,我想从字符串中删除所有html内容:<div class="toto">blablabla</div>

我应该使用正则表达式还是DOM解析器?

回答drachenstern:

这是bbcode的评论内容。 并且这个div中的html是用Geshi(代码突出显示器)生成的,所以我不想删除它。

例如,访问者可以在<script></script> bbcode代码中输入[code][/code][code][/code] bbcode标记之外的所有HTML都必须删除否?

5 个答案:

答案 0 :(得分:1)

这是almost impossible to use a Regex to successfully extract data from a webpage所以我建议改为使用dedicated HTML parser。有些问题对于你来说每次尝试解决它们都很重要,所以它被认为是use an external library可以接受的。

如果你只需要一个div,我想知道你在尝试用特定的div做什么。它可以在客户端工作,还是必须在服务器端发生?你想写一个刮刀吗?

答案 1 :(得分:0)

我想你已经知道了答案:-)

严重但是......在这种情况下,它取决于周围字符串的复杂性...如果它有一个很大的差异或你要保留的片段深层嵌套,那么dom解析器会生成sonse ..如果周围内容是非常可预测的,然后正则表达式可以做。我可能会以任何一种方式使用DOM,因为它更容易使用并且是最安全的。

答案 2 :(得分:0)

除非你能保证字符串的这一部分完全是<div class="toto".....</div>形式,否则正则表达式不能这样做。确切地说,我的意思是class之前没有其他属性,而且这个属性中没有其他div元素。大写/小写,空格和单/双引号应该能够由正则表达式处理。

由于您可能无法做出这些保证(如果可能的话,这将是一种例外情况),您需要一个DOM解析器

即使您确实为这个非常具体的案例制作正则表达式,如果您要在其他地方进行可能的更改或执行类似的任务,那么DOM解析器很快就会变得有价值。

编辑 - 错误地将空白分类,固定。

答案 3 :(得分:0)

wordpress和其他人仍然使用kses,它似乎是一个非常灵活的过滤器 - 在这里查看:http://sourceforge.net/projects/kses/

示例:

$string = kses($string, array('div' => array('valueless' => 'n', value => 'toto')));

答案 4 :(得分:0)

(我假设PHP标签中的以下内容很有用......)

strip_tags()就是这样做的。示例代码

<?php
$text = '<p>Test paragraph.</p> <div class="blah">Other text</div>';

echo strip_tags($text, '<div>');
echo "\n";
?>

产生输出

Test paragraph. <div class="blah">Other text</div>