Возможный дубликат:
Схват атрибута href элемента A
Мне нужно разобрать все ссылки HTML-документа, содержащие какое-то слово (это всегда разные).
Пример:
<a href="/bla:bla">BLA</a> <a href="/link:link">BLA</a> <a href="/link:bla">BLA</a>
Мне нужны только ссылки с «href = / link: ….», что лучший способ пойти на это?
$html = "SOME HTLM "; $dom = new DomDocument(); @$dom->loadHTML($html); $urls = $dom->getElementsByTagName('a'); foreach ($urls as $url) { echo "<br> {$url->getAttribute('href')} , {$url->getAttribute('title')}"; echo "<hr><br>"; }
В этом примере показаны все ссылки, мне нужны конкретные ссылки.
Используя условие.
<?php $lookfor='/link:'; foreach ($urls as $url){ if(substr($url->getAttribute('href'),0,strlen($lookfor))==$lookfor){ echo "<br> ".$url->getAttribute('href')." , ".$url->getAttribute('title'); echo "<hr><br>"; } } ?>
Вместо того, чтобы сначала извлекать все элементы a, а затем отфильтровывать те, которые вам нужны, вы можете напрямую запросить свой документ для этих узлов с помощью XPath :
//a[contains(@href, "link:")]
Этот запрос найдет все элементы в документе, которые содержат строку : в атрибуте href .
Чтобы проверить, начинается ли атрибут href со ссылкой: вы можете сделать
//a[starts-with(@href, "link:")]
$dom = new DomDocument(); $dom->loadHTML($html); $xpath = new DOMXPath($dom); foreach ($xpath->query('//a[contains(@href, "link:")]') as $a) { echo $a->getAttribute('href'), PHP_EOL; }
Также см.
по смежным вопросам.
Примечание: обозначение этого CW из-за многих связанных вопросов
Используйте регулярные выражения.
foreach ($urls as $url) { $href = $url->getAttribute('href'); if (preg_match("/^\/link:/",$href){ $links[$url->getAttribute('title')] = $href; } }
$ links содержит все заголовки и href, которые соответствуют.
Поскольку getAttribute просто возвращает строку, вам нужно только проверить, с чего она начинается, с strpos ().
$href = $url -> getAttrubute ('href'); if (strpos ($href, '/link:') === 0) { // Do your processing here }