PHP - 如何提取指定链接图像的 achor href?

PHP - How to extract achor href of specified linked image?

我如何根据图像 src 提取给定 HTML 的锚 href?

示例:

<a href="http://idontneedthis.com"><img src="path/to/image/1.gif" /></a>
<a href="http://iwantthis.com"><img src="path/to/image/2.gif" /></a>
<a href="http://idontneedthisagain.com"><img src="path/to/image/3.gif" /></a>

在这种情况下,我需要获取 link 的 linked 图像,其 src 为 2.gif。那将是具有 href http://iwantthis.com

的锚点

使用正则表达式来解决这类问题不是一个好主意,而且很可能会导致无法维护和不可靠的代码。最好给我们一个 HTML 解析器。

如果您仍然想使用正则表达式,可以尝试:

preg_match_all('%href="(.*?)".*?src="path/to/image/2\.gif"%i', $html, $match, PREG_PATTERN_ORDER);
$href = $match[1][0];
echo $href ;

输出:

http://iwantthis.com

这里有一种方法可以利用 DOMXPath 来提取那些 @href 值。

$doc = DOMDocument::loadHTML('
    <a href="http://idontneedthis.com"><img src="path/to/image/1.gif" /></a>
    <a href="http://iwantthis.com"><img src="path/to/image/2.gif" /></a>
    <a href="http://idontneedthisagain.com"><img src="path/to/image/3.gif" /></a>
');

$xpath = new DOMXPath($doc);
$links = $xpath->query('//a[img[contains(@src, "2.gif")]]');

foreach ($links as $link) {
   echo $link->getAttribute('href');
}

输出

http://iwantthis.com