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

Статус
В этой теме нельзя размещать новые ответы.

LKamikadze

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



как раз текстовые ссылки в такой формат переводятся
 
Не совсем понятно, что хочет ТС.
Как ссылки могут быть «не текстовыми»?

Если на твоём сайте есть ссылки то они как минимум подобного вида:
<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;
  }
 
Какой двиг на сайте?
 
Не совсем понятно, что хочет ТС.
Как ссылки могут быть «не текстовыми»?
Если на твоём сайте есть ссылки то они как минимум подобного вида:
<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;
  }
Что делает этот кусок? ->
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:
 
Что делает этот кусок? ->
PHP:
      foreach($matches as $match) {
        array_push($a,array($match[1],$match[2]));
      }
Проходит по общему массиву $matches, выделяя поэлементно в под-массив $match и засовывая в результирующий массив $a только нужные нам данные, по сути фильтруя результат.

Если не очень понятно, то можно заменить
PHP:
 return $a;
на
PHP:
 return $matches;
и сравнить результат вызова функции.
Что PREG_SET_ORDER дает?
Советую заглянуть на
и почитать документацию по функции.
А вообще, флаг 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
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху