Получить значение атрибута, используя file_get_contents - PullRequest
0 голосов
/ 04 июля 2018

я хочу получить значение атрибута href по определенной ссылке.

HTML-код, где я хочу получить значение, выглядит следующим образом:

<a href="mailto:mail@xy.com">Some link</a>

Я хочу иметь внутренний href (mailto: mail@xy.com), но я получаю значение ссылки (Некоторая ссылка).

Вот код:

$content = file_get_contents($url);

$dom = new domdocument();
$dom->loadhtml($content);


$nodes = $dom->getElementsByTagName('a');
foreach( $nodes as $node ) {
    if( strpos($node->getAttribute('href'), 'mailto') !== false ) {
        echo '<tr><td>' . $node->nodeValue . '</td></tr>';
    }
}

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Просто используйте подстроку к текущему значению, которое у вас есть:

echo '<tr><td>' . substr($node->getAttribute('href'),7)  . '</td></tr>';

Мне не нравится магическое число, такое как 7, но это длина "mailto:". Замените на переменную, если хотите.

0 голосов
/ 04 июля 2018

Вы хотите получить доступ к атрибуту href, который вы уже правильно используете в качестве аргумента для strpos(). Однако в вашем эхо вы используете значение элемента <a> (т.е. nodeValue()). В W3CSchool есть краткая информация по этому материалу, которую, возможно, стоит прочитать.

Это должно работать:

$nodes = $dom->getElementsByTagName('a');
foreach( $nodes as $node ) {
    if( strpos($node->getAttribute('href'), 'mailto') !== false ) {
        echo '<tr><td>' . $node->getAttribute('href') . '</td></tr>';
    }
}

В качестве альтернативы вы можете просто вызвать $node->getAttribute('href') один раз и сохранить его в переменной.

0 голосов
/ 04 июля 2018

Что по этому поводу:

$content = file_get_contents($url);
$dom = new domdocument();
$dom->loadhtml($content);
$nodes = $dom->getElementsByTagName('a');
foreach( $nodes as $node ) {
    $nodehref = $node->getAttribute('href');
    if( strpos($nodehref, 'mailto') !== false ) {
        echo "<tr><td>$nodehref</td></tr>";
    }
}
...