尝试将标记部分与一个类匹配,该类包含一些特定单词并且还具有id,也许还有其他一些标记属性。
<section id="footer-widget-wysija-2" class="widget footer-widget widget_wysija">Some html</section>
想要在渲染之前从html中删除此部分。
尝试了很多事情,但没有运气 任何帮助将不胜感激 感谢
答案 0 :(得分:0)
只要您没有嵌套部分:
$html = preg_replace('#<section.+id="footer-widget-wysija-2".+</section>#is', '', $html);
答案 1 :(得分:0)
使用HTML文档操作的最佳方法是使用解析器。
在这些示例中,我将使用内置DOMDocument
。
首先,您必须初始化DOMDocument
并加载HTML字符串:
$dom = new DOMDocument();
libxml_use_internal_errors( True );
$dom->loadHTML( $html );
libxml_use_internal_errors( False );
我使用->loadHTML
加载字符串,但如果您的原始HTML在文件中,则可以直接使用
$dom->loadHTMLFile( $yourFilePath );
为了避免关于无效HTML语法的恼人警告,
我设置libxml_use_internal_errors( True )
。
$nodes = $dom->getElementsByTagName( 'section' );
while( $nodes->length )
{
$nodes->item(0)->parentNode->removeChild( $nodes->item(0) );
}
使用->getElementsByTagName( 'section' )
我获得所有文档的标记为section
的节点,然后 - 在while
循环中 - 我删除每个节点。请注意,我使用while
而不是foreach
,因为(如果我有两个section
节点,即)当我删除第一个节点时,第二个节点成为第一个节点,以及以下{{1} }循环将失败。作为替代方案,我可以使用递减 foreach
循环。
for
根据定义, ID是唯一的,因此if( $node = $dom->getElementById( 'footer-widget-wysija-1' ) )
{
$node->parentNode->removeChild( $node );
}
只返回一个元素:如果找到,我可以使用->getElementById()
删除它
最后,要输出生成的HTML,您必须使用
->removeChild()