Иногда перед нами стоит задача найти и заменить сторонние ссылки в строке (тексте) и заменить их на нужные нам, например, перенаправляя сначала на страницу с информацией о перенаправлении.

К примеру, мы имеем строку:

$str='<p>Текст и <a hr_ef="https://google.com">какая-то ссылка</a></p>';

Не забудьте заменить hr_ef на href!

Чтобы заменить такую строку, нам необходимо использовать следующий PHP код:

//регулярное выражение
$reg_exUrl = "/(href=\"http|href=\"https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
//пустой массив с будущими ссылками
$urlsA = array();
//еще массивчик
$urlsToReplace = array();
//проверяем, если есть совпадения во схождении, то выполняем замену
// я, к примеру, заменяю внешние ссылки на ссылку с перенаправлением
if(preg_match_all($reg_exUrl, $str, $urlsA)) {
   //подсчитали количество имеющихся ссылок в массиве
   $numOfMatches = count($urlsA[0]);
   $numOfUrlsToReplace = 0;
   //перебираем все через циклы for и добавляем немножечко рекурсии)
   for($i=0; $i<$numOfMatches; $i++) {
      $alreadyAdded = false;
      $numOfUrlsToReplace = count($urlsToReplace);
      for($j=0; $j<$numOfUrlsToReplace; $j++) {
         if($urlsToReplace[$j] == $urlsA[0][$i]) {
            $alreadyAdded = true;
         }
      }
      if(!$alreadyAdded) {
         array_push($urlsToReplace, $urlsA[0][$i]);
      }
   }
   //еще один цикл заменяет ссылки на нужные нам
   $numOfUrlsToReplace = count($urlsToReplace);
   for($i=0; $i<$numOfUrlsToReplace; $i++){
      if(
         //если ссылки являются ссылками на мои домены, то я их не заменяю
         stripos($urlsToReplace[$i],'inverser.pro')===false && stripos($urlsToReplace[$i],'usemind.org')===false
      ){
         //если ссылки ведут на внешние домены, то я их заменяю
         $str = str_replace($urlsToReplace[$i], 'target="_blank" href="https://link.inverser.pro/r2?l='.$rest = substr($urlsToReplace[$i], 6), $str);
      }
   }
}

Результат выполнения данного скрипта:

<p>Текст и <a target="_blank" href="https://link.inverser.pro/r2?l=https://google.com">какая-то ссылка</a></p>
Поиск и замена ссылок внутри строки PHP