Получить атрибут href ссылки на PHP

PHP, Вопросы и ответы
27 февраля 2012

Вопрос

Мне надо найти ссылки на странице и получить значение ихнего атрибута href. Я нашёл такое регулярное выражение:

/<a\s[^>]*href=(\"\'??)([^\"\' >]*?)[^>]*>(.*)<\/a>/

Но похоже, что оно не отлавливает ссылки вида:

<a title="this" href="that">Ссылка</a>

Как можно изменить это регулярное выражание, чтобы оно работало в том случае, когда атрибут href не является первым атрибутом тега? Или какие другие способы можно использовать для получения атрибутов HTML-тегов на PHP, кроме регулярок?


Ответ №1

Регулярные выражения для парсинга HTML - не очень удобная штука. Лучше воспользоваться встроенным в PHP объектом DOM, он сделает Ваш код более простым, быстрым и надёжным:

$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $node) {
    echo $dom->saveHtml($node), PHP_EOL;
}

Этот код выведет HTML-код всех ссылок, которые находятся в переменной $html.
Для работы с атрибутами есть следующие функции.

Проверить, существует ли атрибут href у Вашей ссылки:

if($node->hasAttribute( 'href' )) {
    // ...
}

Вывести значение атрибута href:

echo $node->getAttribute( 'href' );

Изменить значение атрибута href:

$node->setAttribute('href', 'something else');

Удалить атрибут href:

$node->removeAttribute('href'); 

А ещё можно работать с HTML-атрибутами непосредственно из XPath:

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//a/@href');
foreach($nodes as $href) {
    echo $href->nodeValue;                       // выводим значение атрибута
    $href->nodeValue = 'new value';              // задаём новое значение атрибута
    $href->parentNode->removeAttribute('href');  // удаляем атрибут
}

4 комментария

  • Vi_ru_S:

    Чтото перввый пример не работает либо ручьки у меня из попы:)

  • […] Источник: Получить атрибут href ссылки на PHP | Web-Answers.Ru. […]

  • lnikast:

    Пройдите 1 регистрацию, сделайте 2 действия
    и получайте от 8950 рублей каждые сутки в автоматическом режиме.

    Мы гарантируем:
    - Первый заработок в течении 60 минут.
    - Стабильный доход 24 часа в сутки.
    - Поступление денег без задержек.
    - Для России, стран СНГ и Европы.
    - Без вложений и установки ПО.
    - Специально для новичков и людей без опыта.

    Более подробная информация у нас на сайте. ( http://www.prosto.zarplatt.ru )

  • mElenast:

    Наш сервис предоставляет настоящие лайки на фото заказчиков, которые готовы платить за качество.

    Именно для этого мы и набираем удалённых сотрудников, которые будут выполнять работу, то есть ставить лайки и получить за это деньги.

    Чтобы стать нашим удалённым сотрудником и начать ставить лайки, зарабатывая при этом 45 рублей за 1 поставленный лайк,

    Вам достаточно просто зарегистрироваться на нашем сервисе. > http://oplata-vklike.tk/ <

    Вывод заработанных средств ежедневно в течении нескольких минут.

Добавить комментарий


(обязательно)