我想从html文件中动态删除特定标记及其内容,并考虑使用preg_replace但无法正确获取语法。基本上它应该,例如,做类似的事情: 替换(和包括)“”之间的所有内容。
有人可以帮我解决这个问题吗?
答案 0 :(得分:5)
轻松的家伙。
要使用Ungreedy regexpr,请使用U修饰符 要使其成为多线,请使用s修饰符。 知道这一点,删除所有的paragraphes使用这种模式:
#<p[^>]*>(.*)?</p>#sU
解释:
<p[^>]*>
:检测开头段落(具有假设风格,如)(.*)?
:一切(以“Ungreedy模式”)</p>
:显然是结束段落希望有所帮助!
答案 1 :(得分:2)
我建议不要用正则表达式来做这件事。更安全的方法是使用类似
的方法以下是API参考的链接:Simple HTML DOM API Reference
另一种选择是使用DOMDocument
这里的想法是使用真正的HTML解析器来解析数据,然后您可以移动/遍历树并删除您需要的任何元素/属性/文本。这比尝试使用正则表达式替换HTML中的数据要简洁得多。
<?php
$doc = new DOMDocument;
$doc->loadHTMLFile('blah.html');
$content = $doc->documentElement;
$table = $content->getElementsByTagName('table')->item(0);
$delfirstTable = $content->removeChild($table);
echo $doc->saveHTML();
?>
答案 2 :(得分:2)
如果您尝试清理数据,通常建议您使用白名单,而不是将某些字词和标记列入黑名单。这更容易消毒并防止XSS攻击。有一个名为HTML Purifier的着名图书馆虽然规模较大且有些缓慢,却在净化数据方面取得了惊人的成果。
答案 3 :(得分:2)
如果您不知道标签之间的内容,Phill的回复将无效。
如果中间没有其他标签,这将有效,绝对是更容易的情况。你可以用你需要的任何标签替换div。显然。
preg_replace('#<div>[^<]+</div>#','',$html);
如果中间可能有其他标签,这应该可以,但可能会导致问题。如果是这样的话,你可能最好使用上面的DOM解决方案
preg_replace('#<div>.+</div>#','',$html);
这些未经过测试
答案 4 :(得分:1)
PSEUDO CODE
function replaceMe($html_you_want_to_replace,$html_dom) {
return preg_replace(/^$html_you_want_to_replace/, '', $html_dom);
}
HTML之前
<div>I'm Here</div><div>I'm next</div>
<?php
$html_dom = "<div>I'm Here</div><div>I'm next</div>";
$get_rid_of = "<div>I'm Here</div>";
replaceMe($get_rid_of);
?>
HTML After
<div>I'm next</div>
我知道这是一项黑客工作