将所有 url 替换为 PHP 中的链接

我想将文本中的所有网址设为超链接。我做了以下事情。但链接缺少“:”。任何帮助表示赞赏。


<?php


$string = "Hallo Studenten http://google.com/your/subpage and https://www.yahoo.com/my/subpage";

  $regexp = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i";

  $anchorMarkup = "<a href=\"%s://%s\" target=\"_blank\" >%s</a>";


  preg_match_all($regexp, $string, $matches, \PREG_SET_ORDER);


  foreach ($matches as $match) {

    if (empty($match[1]) && empty($match[7])) {

      $http = $match[2]?$match[2]:'http';

      $replace = sprintf($anchorMarkup, $http, $match[0], $match[0], $match[1]);

      $string = str_replace($match[0], $replace, $string);

    }

  }

  echo $string; 

?>

http://phpfiddle.org/lite/code/2yg5-i3uj


慕斯709654
浏览 63回答 1
1回答

慕姐8265434

可以使用preg_replace函数来完成:$string       = "Hallo Studenten http://google.com/your/subpage and https://www.yahoo.com/my/subpage";$regexp       = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i";$anchorMarkup = "<a href=\"$0\" target=\"_blank\" >$0</a>";echo preg_replace($regexp, $anchorMarkup, $string);
打开App,查看更多内容
随时随地看视频慕课网APP