Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2013, 14:07   #1
myorient
Пользователь
 
Регистрация: 27.05.2013
Сообщений: 24
По умолчанию Ищу все ссылки на странице

Добрый день, ещё раз!
Написал скриптец-парсер ссылок:
PHP код:
function get_all_links($target) {
    
$links = array();
    
preg_match('@^(?:http://)?([^/]+)@i'$target$domain);
    
$host $domain[1];
    
$html file_get_contents($target);
    
preg_match_all("/<[Aa][\s]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=['\"\s]*([^ \"'>\s#]+)[^>]*>/"$html$matches);
    
//preg_match_all("/\s*href\s*=\s*[\"\']{0,1}([^\s\"\']+)[\"\'\s]+/ims",$html,$matches);
    
$urls $matches[1];
    for (
$i 0$i count($urls); $i++) {
        if(
preg_match("/http:/i"$urls[$i]) or preg_match("/https:/i"$urls[$i])) {
            
$raw preg_replace('/^([^?]+)(\?.*?)?(#.*)?$/''$1$3'$urls[$i]);
            
array_push($links$raw);
            
$links array_unique($links);
        } else {
            
$raw preg_replace('/^([^?]+)(\?.*?)?(#.*)?$/''$1$3'$urls[$i]);
            
array_push($links"http://".$host.$raw);
            
$links array_unique($links);    
        }            
    }
    return 
$links;

Так вот, с "нормальных" сайтов, всё ОК, а как дело доходит до сайта педивикия (ru.wikipedia.org) так тут запарка. А всё дело в том, что на педивикии иногда ссылки бывают вида:
Код:
href="//ru.wikipedia.org/w/index.php
то есть две слеши перед ссылкой
Соответственно, мой скрипт парсит их как:
Код:
http://ru.wikipedia.org//ru.wikipedia.org/w/index.php
Что делать?
myorient вне форума Ответить с цитированием
Старый 21.08.2013, 14:32   #2
myorient
Пользователь
 
Регистрация: 27.05.2013
Сообщений: 24
По умолчанию

Всё. Аффтар сам догадался:
PHP код:
function get_all_links($target) {
    
$links = array();
    
preg_match('@^(?:http://)?([^/]+)@i'$target$domain);
    
$host $domain[1];
    
$html file_get_contents($target);
    
preg_match_all("/<[Aa][\s]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=['\"\s]*([^ \"'>\s#]+)[^>]*>/"$html$matches);
    
$urls $matches[1];
    for (
$i 0$i count($urls); $i++) {
        if(
preg_match("/http:/i"$urls[$i]) or preg_match("/https:/i"$urls[$i])) {
            
$raw preg_replace('/^([^?]+)(\?.*?)?(#.*)?$/''$1$3'$urls[$i]);
            
array_push($links$raw);
            
$links array_unique($links);
        } else {
            
$raw preg_replace('/^([^?]+)(\?.*?)?(#.*)?$/''$1$3'$urls[$i]);
            if(
$urls[$i][0]=="/" and $urls[$i][1]=="/") {
                
$raw substr($raw2);
                
array_push($links"http://".$raw);
                
$links array_unique($links);    
            } else {
                
array_push($links"http://".$host.$raw);
                
$links array_unique($links);
            }
            
        }            
    }
    return 
$links;

myorient вне форума Ответить с цитированием
Старый 21.08.2013, 15:01   #3
myorient
Пользователь
 
Регистрация: 27.05.2013
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Каа Посмотреть сообщение
Автор, завидую вам черной завистью. Я в регулярках дуб дубом. Может, подскажете хороший справочник?
Вам Гугл в помощь Я только так и учусь...
myorient вне форума Ответить с цитированием
Старый 24.08.2013, 21:53   #4
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

В шестой строке явно не хватает модификатора i
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли при нажатии ссылки вывести из базы содержимое категории на той же странице средствами php? newstarter PHP 7 30.08.2012 20:56
изменения стиля у ссылки, по нажатию на любую ссылку на странице. Небесный JavaScript, Ajax 6 24.08.2012 07:59
Как составить регулярные выражения которые будет искать все ссылки на странице? melihovgv PHP 4 10.12.2011 16:56
Ищу советы\названия\ссылки AAUch Свободное общение 5 13.06.2011 16:04
Как найти все ссылки на странице, начинающееся с... codermoder Работа с сетью в Delphi 6 11.02.2011 10:24