Парсинг ссылок

Тема в разделе "PHP", создана пользователем LKamikadze, 15 авг 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. LKamikadze

    LKamikadze Создатель

    Регистр.:
    9 янв 2009
    Сообщения:
    12
    Симпатии:
    0
    Подскажите пожалуйста.
    Вот у меня на сайте размещены ссылки любого вида
    например Перейти по ссылке
    Перейти по ссылке
    А как их приобразовать чтобы они были не тестовые а <a href=site.ru>site.ru</a>
    Подскажите плиз
     
  2. betatest

    betatest

    Регистр.:
    3 дек 2007
    Сообщения:
    517
    Симпатии:
    127
    не совсем понятно, если нужен перевод, то это здесь


    Перейти по ссылке


    как раз текстовые ссылки в такой формат переводятся
     
  3. jID

    jID Постоялец

    Регистр.:
    12 фев 2008
    Сообщения:
    106
    Симпатии:
    31
    Не совсем понятно, что хочет ТС.
    Как ссылки могут быть «не текстовыми»?

    Если на твоём сайте есть ссылки то они как минимум подобного вида:
    <a href=site.ru>site.ru</a>

    Если ты хочешь их отпарсить и загнать в массив, то вероятно тебе поможет такая функция:
    PHP:
      // все ссылки в массив
      
    function pc_link_extractor($s) {
        
    $a = array();
        if (
    preg_match_all('/<a\s+.*?href=[\"\']?([^\"\' >]*)[\"\']?[^>]*>(.*?)<\/a>/i',
                         
    $s,$matches,PREG_SET_ORDER)) {
          foreach(
    $matches as $match) {
            
    array_push($a,array($match[1],$match[2]));
          }
        }
        return 
    $a;
      }
     
    sCrypt нравится это.
  4. Klepach

    Klepach

    Регистр.:
    31 окт 2008
    Сообщения:
    941
    Симпатии:
    250
    Какой двиг на сайте?
     
  5. fri

    fri Создатель

    Регистр.:
    14 авг 2009
    Сообщения:
    32
    Симпатии:
    1
    Что делает этот кусок? ->
    PHP:
          foreach($matches as $match) {
            
    array_push($a,array($match[1],$match[2]));
          }
       
    И, пардон, еще вопрос
    PHP:
    preg_match_all('/<a\s+.*?href=[\"\']?([^\"\' >]*)[\"\']?[^>]*>(.*?)<\/a>/i',
                         
    $s,$matches,PREG_SET_ORDER)
    Что PREG_SET_ORDER дает?
    Взялся ваять себе парсилку, и даже сделал из кусков, работает, а мозгов не хватает понять как именно:ah:
     
  6. jID

    jID Постоялец

    Регистр.:
    12 фев 2008
    Сообщения:
    106
    Симпатии:
    31
    Проходит по общему массиву $matches, выделяя поэлементно в под-массив $match и засовывая в результирующий массив $a только нужные нам данные, по сути фильтруя результат.

    Если не очень понятно, то можно заменить
    PHP:
     return $a;
    на
    PHP:
     return $matches;
    и сравнить результат вызова функции.
    Советую заглянуть на
    http://ru.php.net/manual/en/function.preg-match-all.php и почитать документацию по функции.
    А вообще, флаг PREG_SET_ORDER устанавливает сортировку результата в порядке нахождения.
    Т.е. сама функция pc_link_extractor($s) работает предельно просто. На входе ей дают голый HTML в переменной $s.
    Обратно она возвращает массив с элементами «ссылка», «текст».
    Например, на входе были данные:
    Код:
    <a href="http://ya.ru" title="some title">yandex.ru</a>
    <a href="http://r0.ru">rambler.ru</a>
    <a href=http://google.ru>google.ru</a>
    В результате функция отпарсит HTML в массив ссылок:
    Код:
    Array
    (
        [0] => Array
            (
                [0] => http://ya.ru
                [1] => yandex.ru
            )
        [1] => Array
            (
                [0] => http://r0.ru
                [1] => rambler.ru
            )
        [2] => Array
            (
                [0] => http://google.ru
                [1] => google.ru
            )
    )
    Как видно из примера, будет игнорировано всё ненужное (кавычки, побочные переменные типа title и т.п) и отсортировано по элементам, в порядке появления.
     
    fri нравится это.
Статус темы:
Закрыта.