一个通用的答案:
例如,假设您有一个 id = anchors 的导航栏,锚点位于其中。
示例 HTML:
$html = '<html>(...)
<div id="anchors">
<a href="anchor1.php">link number 1</a>
<a href="anchor2.php">another link</a>
</div>
(...)
</html>';
示例函数:
function findAnchors($html)
{
$links = array();
$doc = new DOMDocument();
$doc->loadHTML($html);
$navbars = $doc->getElementsByTagName('div');
foreach ($navbars as $navbar) {
$id = $navbar->getAttribute('id');
if ($id === "anchors") {
$anchors = $navbar->getElementsByTagName('a');
foreach ($anchors as $a) {
$links[] = $doc->saveHTML($a);
}
}
}
return $links;
}
这将返回一个包含所有链接的数组。
输出:
array
0 => string '<a href="anchor1.php">link number 1</a>' (length=39)
1 => string '<a href="anchor2.php">another link</a>' (length=38)
根据 OP 评论编辑:
除非您以某种方式“标记”它们,否则它并非微不足道。一种方法是向每个锚点添加一个类,然后横穿整个文档。
例子:
HTML
$html = '<html>(...)
<a class="anchor" href="anchor1.php">link number 1</a>
(... stuff in here)
<a class="anchor" href="anchor2.php">another link</a>
(...)
</html>';
功能:
function findAnchors($html)
{
$links = array();
$doc = new DOMDocument();
$doc->loadHTML($html);
$aTags = $doc->getElementsByTagName('a');
foreach ($aTags as $a) {
$class = $a->getAttribute('class');
if ($class === "anchor") {
$links[] = $doc->saveHTML($a);
}
}
return $links;
}