删除标签 <a> 但不删除内容
Remove the tag <a> but not content
我正在尝试获取页面中的所有链接并将其删除,但这些链接的内容除外。该代码无法 100% 工作,因为一些 lins 已被删除,而另一些则没有。
我正在使用 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()
returns是一个"live"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);
}
我正在尝试获取页面中的所有链接并将其删除,但这些链接的内容除外。该代码无法 100% 工作,因为一些 lins 已被删除,而另一些则没有。
我正在使用 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()
returns是一个"live"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);
}