尝试将标签部分与包含某些特定单词并且还具有id的类(也许是其他一些标签属性)匹配。
<section id="footer-widget-wysija-2" class="widget footer-widget widget_wysija">Some html</section>
希望在呈现之前从 html 中删除此部分。
尝试了很多事情,但没有运气。
任何帮助将不胜感激。
谢谢
处理 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 )
.
示例 1:删除所有带有"section"标签的节点:
$nodes = $dom->getElementsByTagName( 'section' );
while( $nodes->length )
{
$nodes->item(0)->parentNode->removeChild( $nodes->item(0) );
}
使用->getElementsByTagName( 'section' )
,我获取带有标签section
的文档的所有节点,然后 - 在while
循环中 - 我删除每个节点。请注意,我使用 while
而不是 foreach
,因为(如果我有两个section
节点,即)当我删除第一个节点时,第二个节点成为第一个,接下来的foreach
循环将失败。作为替代方案,我可以使用递减for
循环。
示例 2:按 ID 删除节点:
if( $node = $dom->getElementById( 'footer-widget-wysija-1' ) )
{
$node->parentNode->removeChild( $node );
}
根据定义,ID 是唯一的,因此->getElementById()
只返回一个元素:如果找到它,我可以使用 ->removeChild()
删除它
输出网页:
最后,要输出生成的 HTML,您必须使用
echo $dom->saveHTML();
只要
你没有嵌套的部分:
$html = preg_replace('#<section.+id="footer-widget-wysija-2".+</section>#is', '', $html);