PHP Dom使用strpos获取某些href值

时间:2014-05-11 11:03:30

标签: php dom

有人可以告诉我为什么这不起作用。

我试图通过使用php dom从页面获取某个href并且href - www.imdb.com/title/tt-some-id包含单词imdb所以在下面的示例中我尝试获取href通过使用PHP函数strpos来查找单词imdb,但它看起来不起作用。

$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>

有人可以告诉我为什么感谢

2 个答案:

答案 0 :(得分:3)

您也可以将逻辑移动到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"
}

答案 1 :(得分:2)

这实际上是有效的,但你要覆盖它..

正如您所看到的,您的最终<a> href不包含 imdb 文本,因此您的else声明会覆盖您之前找到的结果。

如何解决?

只需从代码中删除else部分即可。

Working Demo