[英]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.