繁体   English   中英

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

[英]Remove all html tags and content except for a div class

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

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

回答drachenstern:

这是bbcode的注释内容。 而且此div中的html是用Geshi(代码荧光笔)生成的,所以我不想删除它。

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

使用Regex从网页成功提取数据几乎是不可能的,因此我建议使用专用的HTML解析器 有些问题对于您每次尝试解决它们都很大,因此使用外部库被认为是可以接受的。

如果您只需要一个div,我想知道您要对特定的div做什么。 它可以在客户端运行还是必须在服务器端运行? 您要写刮板吗?

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

严重的是...在这种情况下,它取决于周围字符串的复杂性...如果它的差异很大,或者您想保留的代码段嵌套得很深,则dom分析器会发出声音..如果周围的内容很漂亮正则表达式可能可以预测。 我可能会以任何一种方式使用DOM,因为它将更易于使用并且是最可靠的方法。

除非您可以保证字符串的这一部分完全是<div class="toto".....</div> ,否则regex不能做到这一点。 确切地说,我的意思是,主要是在class之前没有其他属性,并且在此内部没有其他div元素。 大写/小写,空格和单/双引号应能够由正则表达式处理。

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

即使您确实使正则表达式适用于这种非常特殊的情况,但是如果您要进行可能的更改或在其他地方执行类似的任务,则DOM分析器将很快变得值得。

编辑-错误地将空格归类,已修复。

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

例:

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

(我从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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM