0
Доброго времени суток.
Начинаю изучать регулярные выражения, но до их освоения видимо еще далеко. Такая задача, нужно любым гипер ссылкам на странице добавить GET параметр, в том числе и тем у которых уже есть GET параметры.
Страница формируется на php.
Думаю уже в сторону каких-нибудь библиотек, которые позволят работать с DOM документа.
Найти гипеерсылки не составляет труда, видоизменить их тоже, но вот как начать замену в тексте?
Пытался через str_replace составить 2 массива - первый для найденых ссылок, второй для заменяемых, но несмотря на то, что оба массивы правильные, замена идет с ошибками, так как всякий раз поиск и замена осуществляется с начала текста.


  $regForUrl = '/"http:\/\/[+-_.0-9a-zA-Z\/=&\?]*"/';
  preg_match_all($regForUrl, $text, $result, PREG_PATTERN_ORDER);
  $result = array_shift($result);
  $find = array();
  $replace = array();

  foreach ($result as $url)
  {
    $url = str_replace('"', '', $url);
    $find[] = $url;
    $newUrl = $url;
    $urlPart = explode('?', $newUrl);
    $getString = isset($urlPart[1]) ? $urlPart[1] : null;
    if ( $getString )
    {
      $newUrl .= '&subscriber';
    }
    else
    {
      $newUrl .= "?subscriber";
    }
      $replace[] = $newUrl;
  }

  var_dump($find);
  var_dump($replace);
  return str_replace($find, $replace, $text);
 
4 года 7 месяцев назад

#ссылка
комментировать


0
Я не очень силен в регулярках, но может как-то так:

$str = '<p>some text <a href="/some/path/index.php">/some/path/index.php</a></p>
<p>some text <a href=\'
/some/path/index2.php\'>link2</a></p>
<p>some text <a href=/some/path/index3.php?foo=bar>link3</a></p>
<p>some text <a href=/some/path/index3.php?foo=bar>link4</a></p>'
;
$get_to_add = 'foo1=bar1&foo2=bar2';

$m = array();
if (preg_match_all('#(href=[\"\']*[^\s\"\'>]*)#si',$str,$m)) {
  $m[1] = array_unique($m[1]);
  foreach($m[1] as $link) {
    $d = strpos($link,'?') === false ? '?':'&';
    $str = str_replace($link,$link.$d.$get_to_add,$str);
  }
}

echo $str;
#ссылка
4 года 7 месяцев назад
Думаю, что копать нада в сторону preg_replace_callback() и в callback функции все необходимое выполнить для замены
njspok 4 года 7 месяцев назад #
комментировать
0
Вот выложил свою версию, ищет урл в кавычках (такие как в тэгах) и заменяет их на аналогичные, только добавляя GET параметр

$regForUrl = '/"http:\/\/[w]{0,3}.sima-land.ru\/[+-_.0-9a-zlA-Z\/=&\?]*"/';

function callback($match) {

  $goalName = 'GnM4Lhuxmy';

  $url = $match[0];
  $url = str_replace('"', '', $url); // удаляем кавычки

  // смотрим, есть ли в url get параметры
  $urlParts = explode('?', $url);
  if (isset($urlParts[1]))
  {
    $url .= '&' . $goalName;
  }
  else
  {
    $url .= '?' . $goalName;
  }

  $url = '"' . $url . '"'; // возвращаем кавычки

  return $url;

}

return preg_replace_callback($regForUrl, 'callback', $text);
 
#ссылка
4 года 7 месяцев назад
комментировать
0
Полностью поддерживаю[url=http://agrolinepro.ru/tobacco-equipment]![/url]
#ссылка
1 месяц 4 дня назад
комментировать
0
прогон сайта логин скайпа pokras7777
#ссылка
1 месяц 4 дня назад
комментировать
0
заказать продвижение интернет магазина логин скайпа pokras7777
#ссылка
1 месяц 3 дня назад
комментировать

Ваш ответ:

Будет создана учетная запись и на email выслано письмо подтверждения.
или
Использовать OpenID

Получить OpenID
Что такое OpenID?

новые ответы

Первый раз на сайте?

askdev.ru — это социальный сайт вопросов и ответов для IT-специалистов: программистов, веб-дизайнеров, системных администраторов.
Как stackoverflow.com, только на русском.
о сайте » регистрация »
Показан

3447 раз

Задан

4 года 7 месяцев назад

Теги