繁体   English   中英

PHP Dom使用strpos获得某些href值

[英]PHP Dom Get Certain href Value Using strpos

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

我正在尝试使用php dom来获取某个href,并从页面获取该www.imdb.com/title/tt-some-id包含单词imdb因此在下面的示例中,我尝试通过使用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>

有人可以告诉我为什么它不起作用谢谢

您也可以将逻辑移至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部分。

工作演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM