dongwei2610 2014-10-03 14:34
浏览 22
已采纳

php基于getAttribute从html中删除标签

How can I limit which link tag is removed by specifying $tag->getAttribute('rel') = "icon"? I tried adding a simple if statement to the $remove[] $tags as $tag; line...code ran through, but the link with rel="icon" line was not at all removed.

So in this example the whole link tag should be removed from the html:

<link rel="icon" type="image/png" href="/images/favicon.ico" />


$html = file_get_contents($url);
$dom = new DOMDocument();
$dom->loadHTML($html);

$tags = $dom->getElementsByTagName('link');

$remove = [];
foreach($tags as $tag) {
    $remove[] = $tag;
}

foreach ($remove as $tag) {
    $tag->parentNode->removeChild($tag); 
}

UPDATE Answer here: @prodigitalson provided the following which initially did not work:

$html = file_get_contents($url);
$dom = new DOMDocument();
$dom->loadHTML($html);
$finder = new DOMXpath($dom);
$tags = $finder->query('//link[@rel="icon"]');

foreach ($tags as $tag)
{
$tag->parentNode->removeChild($tag); 
}

by adding the following line as the last line of the code...worked perfect.

$html = $dom->saveHTML();
  • 写回答

2条回答 默认 最新

  • duanren9163 2014-10-03 14:40
    关注

    You can get these all with an xpath:

    $html = file_get_contents($url);
    $dom = new DOMDocument();
    $dom->loadHTML($html);
    $finder = new DOMXpath($dom);
    $tags = $finder->query('//link[@rel="icon"]');
    $toRemove = array();
    
    foreach ($tags as $tag)
    {
      $toRemove[] = $tag;
    }
    
    // with array walk
    array_walk(function($elem) { $elem->parentNode->removeChild($elem); }, $toRemove);
    
    // with foreach
    foreach ($toRemove as $tag) {
      $tag->parentNode->removeChild($tag);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败