Как найти все ссылки на странице через PHP
Иногда перед программистом стоит не самая простая задача: найти все ссылки на странице с помощью PHP. Где это может быть нужно? Да, много где, например, при выводе одного сайта на другом. Для этого требуется вытащить из него все ссылки и заменить на другие. Также поиск ссылок используется при создании ЧПУ-ссылок, ведь нужно вытащить все старые ссылки и поставить заместо них новые. В общем, задач можно придумать много, но ключевой вопрос всего один: "Как найти все ссылки на странице через PHP?". Об этом я и написал данную статью.
Кто имеет хотя бы маленький опыт, тут же скажет, что надо написать регулярное выражение и будет абсолютно прав. Действительно, простыми строковыми функциями данную задачу будет крайне трудно решить. Ведь каждый пишет по-разному, кто-то прописными бувами, кто-то строчными, кто-то ставит пробел после, например, знака "=", а кто-то нет. У кого-то двойные кавычки, а у кого-то одинарные. В общем, разновидностей очень много. И единственная возможность предусмотреть максимум всего - это регулярное выражение.
<?php
/* $html - некий html-код некой страницы, \n - это переход на новую строку (верстальщики иногда это делают) */
$html = "Текст <a href='page1.html'>ссылка</a> и снова <a hREF \n =\"page2.html\" title=''>ссылка</a> конец";
/* Вызываем функцию, которая все совпадения помещает в массив $matches */
preg_match_all("/<[Aa][\s]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\s]*([^ \"'>\s#]+)[^>]*>/", $html, $matches);
$urls = $matches[1]; // Берём то место, где сама ссылка (благодаря группирующим скобкам в регулярном выражении)
/* Выводим все ссылки */
for ($i = 0; $i < count($urls); $i++)
echo $urls[$i]."<br />";
?>
Самая сложная часть - это регулярное выражение, ради его публикации данная статья и создавалась, чтобы новичкам не пришлось писать нечто подобное. Хотя это и является очень полезным, но сразу новичок такое никогда не напишет, а для решения задачи это требуется. Конечно, данное регулярное выражение по поиску ссылок неидеальное (едва ли можно написать идеальное), но, думаю, что 99% ссылок будут найдены. А если код писал адекватный верстальщик, то все 100%. А как работать с найденными ссылками дальше, это уже отдельная история.
-
- Михаил Русаков
Комментарии (7):
а почему бы просто не воспользоваться функцией getElementsByTagNam('a') ?
Ответить
потому что она медленнее
Ответить
SoffRick http://php.net/manual/ru/class.domdocument.php почитайте, а потом умничайте
Ответить
А DOM в таком случае не целесообразнее использовать? Вроде и проще, и, к тому же, есть достаточно библиотек для этого.
Ответить
ссылка типа <a href="http://site.ru/index.php?href=articles&id=22" будет обработана articles&id=22 Нахрен нужно это тогда?
Ответить
А подскажите пожалуйста как получить полную ссылку с разметкой? К примеру так: <a href="http://site.ru/url">Ссылка</a> А не как сейчас только: http://site.ru/url
Ответить
Найти все ссылки на странице (PHP): https://batas.kz/article/nayti-vse-ssylki-na-stranice-php
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.