Разбирайте все ссылки, которые содержат определенное слово в теге "href"
Возможный дубликат:
Схват атрибута 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>";
}
В этом примере показаны все ссылки, мне нужны конкретные ссылки.
Ответы
Ответ 1
Используя условие.
<?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>";
}
}
?>
Ответ 2
Вместо того, чтобы сначала извлекать все элементы 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 из-за многих связанных вопросов
Ответ 3
Используйте регулярные выражения.
foreach ($urls as $url)
{
$href = $url->getAttribute('href');
if (preg_match("/^\/link:/",$href){
$links[$url->getAttribute('title')] = $href;
}
}
$links содержит все заголовки и href, которые соответствуют.
Ответ 4
Как getAttribute просто возвращает строку, вам нужно только проверить, с чего она начинается с strpos().
$href = $url -> getAttrubute ('href');
if (strpos ($href, '/link:') === 0)
{
// Do your processing here
}