|
|
|
| Хотел бы узнать - как лучше взять все ссылки со страницы? У меня 2 правила:
1. preg_match_all('~<a.*?href=(\'|"|)([^\s]+)\\1[^>]*?>(.*?)</a>~is', $str, $out);
2. preg_match_all('|<a.*href="(.*)".*>(.*)</a>|Uis', $url, $links);
Недостатки второго примера - не ищет ссылки типа "<a href=link" или "<a href='link", недостаток первого примера - писал не я, поэтому не работает иногда и я не могу разобраться, почему. Хотелось бы узнать как можно получить все ссылки со страницы, независимо от того как она поставлена (кавычки, двойные кавычки, без кавычек) и круто было бы узнать, внешняя она или нет (т.е стоит не на этот сайт, а на другой (писали что можно так сделать)). Спасибо. | |
|
|
|
|
|
|
|
для: locker
(14.12.2006 в 13:06)
| | Лучше использовать регулярное выражение, которое захватывает все ссылки
preg_match_all('|<a.*href=([^>]+)>(.*?)</a>|Uis', $url, $links);
|
А лишние кавычки и пробелы потом удалять уже после в цикле постобработки. | |
|
|
|
|
|
|
|
для: locker
(14.12.2006 в 13:06)
| | Можно использовать такое рег. выражение:
"#<a.*?href=['\"]?([^'\"\s>]+)['\"]?[^>]*?>#is"
|
Оно обрабатывает ссылки и "с" и "без" кавычек
>> внешняя она или нет т.е стоит не на этот сайт, а на другой
Если ссылка начинается на " http:// ", то нужно проверить host, полученный в результате обработки строки ф-ей parse_url ... А если ссыка не начинается на хттп://, то ее можно не проверять | |
|
|
|
|
|
|
|
для: kasmanaft
(14.12.2006 в 14:36)
| | Да, но так или иначе потом нужно пройтись по массиву полученных значений, а нельзя сразу - в процессе парсинга выделить внешние ссылки - т.е. добавить например условие что они не дожны начинаться с www.site.ru например? | |
|
|
|
|
|
|
|
для: locker
(14.12.2006 в 14:44)
| | Немного не понял ... Ссылки на другие сайты нужно отбросить или именно они и нужны?
<?
$text = file_get_contents('http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=29323&page=1');
// только внешние
preg_match_all("#<a.*?href=['\"]?(?!http://www.softtime.ru)(http://[^'\"\s>]+)['\"]?[^>]*?>#is", $text, $regs);
// только www.softtime.ru
preg_match_all("#<a.*?href=['\"]?((http://www.softtime.ru/|(?!http://))[^'\"\s>]+)['\"]?[^>]*?>#is", $text, $regs2);
echo "<pre>";
print_r($regs[1]);
print_r($regs2[1]);
?>
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(14.12.2006 в 15:49)
| | Хе-хе. Именно то, что нужно :) | |
|
|
|