PHP Dom使用strpos获取特定的href值


PHP Dom Get Certain href Value Using strpos

谁能告诉我为什么这不起作用?

我试图通过使用php dom从页面获得一定的href,并且href - www.imdb.com/title/tt-some-id包含单词imdb,因此在下面的示例中,我试图通过使用php函数strpos来查找单词imdb来获得href,但它没有看到工作。

$page = 'www.someurl.com';
$data = array();
$dom = new DOMDocument();
@$dom->loadHTML($page);
$data['imdb_link'];
$links = $dom->getElementsByTagName('a');
foreach ($links as $link) {
    $href = $link->getAttribute('href');
    if (false !== strpos($href,'imdb')) {
        $data['imdb_link'] = $href;
    } else {
        $data['imdb_link'] = '';
    }
}

和页面

的链接
<a href="some-url.com"></a>
<a href="www.imdb.com/title/some-id"></a>
<a href="another-url.com"></a>
<a href="another-url.com"></a>

谁能告诉我为什么它不工作谢谢

您也可以将逻辑移动到Xpath。结果将是一个没有找到匹配元素的空字符串:

$page='<a href="some-url.com"></a>
<a href="www.imdb.com/title/some-id"></a>
<a href="another-url.com"></a>
<a href="another-url.com"></a>';
$dom = new DOMDocument();
@$dom->loadHTML($page);
$xpath = new DOMXpath($dom);
$data['imdb_link'] = $xpath->evaluate(
  'string(//a[contains(@href, "imdb")]/@href)'
);
var_dump($data);

输出:https://eval.in/149602

array(1) {
  ["imdb_link"]=>
  string(26) "www.imdb.com/title/some-id"
}

这实际上是工作的,但是你正在覆盖它…

你可以看到你最终的<a> href不包含文本imdb,所以它将被你之前发现的else语句覆盖。

怎么解决呢?

只要从你的代码中删除else部分。

演示工作