删除标签<a>但不删除内容

马塞尔

我试图从页面中获取所有链接并删除它们,但这些链接的内容除外。该代码无法100%正常运行,因为某些lin被删除,而另一些lin则不能。

我正在使用PHP和DOMDocument。

   $dom = new DOMDocument();
   $dom->encoding = 'utf-8';
   $dom->loadHTML(utf8_decode($text));

   $links = $dom->getELementsByTagName('a');

   foreach($links as $link)
   {
       $link->parentNode->replaceChild(new DOMText($link->textContent), $link);//I've tried this way but not work.

       //And I've tried other way below:
       /*$sibling = $link->firstChild;
       do {
          $next = $sibling->nextSibling;
          $link->parentNode->insertBefore($sibling, $link);
       } while ($sibling = $next);
       $link->parentNode->removeChild($link);*/
   }
   return $dom->saveHTML();

例如,我们有三个链接:

<p>Page</p>
<a href="http://domain/page/pag.php?id_pag=1481">Page1</a>
<a href="http://domain/page/pag.php?id_pag=1482">Page2</a>
<a href="http://domain/page/pag.php?id_pag=1483">Page3</a>
<p>Test</p>

结果是:

<p>Page</p>
Page1
<a href="http://domain/page/pag.php?id_pag=1482">Page2</a>
Page3
<p>Test</p>

我希望删除所有链接(不包含内容)。有解决这个问题的主意吗?

巴尔玛

将其复制$links为普通数组,因为getElementsByTagName()返回的对象是“活动”的NodeList-在修改DOM时它会更改,这会导致foreach循环跳过元素(这与尝试从数组中删除元素是相同的问题当您遍历它时)。

$links_array = [];
foreach ($links as $l) {
    $links_array[] = $l;
}
foreach($links_array as $link)
{
   $link->parentNode->replaceChild(new DOMText($link->textContent), $link);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章