当前位置:首页 > PHP教程 > php应用 > 列表

php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)

发布:smiling 来源: PHP粉丝网  添加日期:2020-08-27 22:07:27 浏览: 评论:0 

这篇文章主要介绍了php为url地址添加a标签的示例,大家参考使用吧

需要提取的内容如下:

  1. <a href="http://baidu.com">http://baidu.com</a>这是第一个A标签, 
  2. <a href="http://blog.baidu.com">成长脚印-专注于互联网发展</a>这是第二个A标签。 
  3. https://www.phpfensi.com这是第一个需要被提取的URL地址, 
  4. http://blog.baidu.com这是第二个需要被提取的URL地址'。 
  5. <img border="0" alt="" src="http://baidu.com/css/sitelogo_zh-cn.gif">,这是一个IMG标签 

类似微博中的自动提取URL为超链接地址。即内容提取出来添加A标签,转换成真正的超链接。网上搜索了很久,没有找到一个切实可行的解决方案。大都只是简单的提取URL(A标签和IMG标签内的地址也被提取替换了),并不能满足以上需求。正则表达式中也没发现能够实现提取时过滤掉A标签的方法。于是转换了一下思路,“曲线救国”,即,先将所有的A标签和IMG标签正则替换为某一个统一的标记,然后再提取URL地址替换为超链接,最后再将统一的标记还原替换为以前的A标签和IMG标签便解决了。

  1. function linkAdd($content){ 
  2.  //提取替换出所有A标签(统一标记<{link}>) 
  3.  preg_match_all('/<a.*?href=".*?".*?>.*?</a>/i',$content,$linkList); 
  4.  $linkList=$linkList[0]; 
  5.  $str=preg_replace('/<a.*?href=".*?".*?>.*?</a>/i','<{link}>',$content); 
  6.  
  7.  //提取替换出所有的IMG标签(统一标记<{img}>) 
  8.  preg_match_all('/<img[^>]+>/im',$content,$imgList); 
  9.  $imgList=$imgList[0]; 
  10.  $str=preg_replace('/<img[^>]+>/im','<{img}>',$str); 
  11.  
  12.  //提取替换标准的URL地址 
  13.  $str=preg_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_/+.~#?&//=]+)','<a href="\0" target="_blank">\0</a>',$str); 
  14.  
  15.  //还原A统一标记为原来的A标签 
  16.  $arrLen=count($linkList); 
  17.  for($i=0;$i<$arrLen;$i++){ 
  18.   $str=preg_replace('/<{link}>/',$linkList[$i],$str,1);  
  19.  } 
  20.  
  21.  //还原IMG统一标记为原来的IMG标签 
  22.  $arrLen2=count($imgList); 
  23.  for($i=0;$i<$arrLen2;$i++){ 
  24.   $str=preg_replace('/<{img}>/',$imgList[$i],$str,1);  
  25.  } 
  26.  
  27.  return $str
  28.  
  29. $content=' 
  30. <a href="http://baidu.com">http://baidu.com</a>这是第一个A标签, 
  31. <a href="http://blog.baidu.com">成长脚印-专注于互联网发展</a>这是第二个A标签。 
  32. https://www.phpfensi.com这是第一个需要被提取的URL地址, 
  33. http://blog.baidu.com这是第二个需要被提取的URL地址。 
  34. <img border="0" alt="" src="http://baidu.com/css/sitelogo_zh-cn.gif">,这是一个IMG标签'; 
  35. echo linkAdd($content); 

返回的内容为:

  1. <a href="http://baidu.com">http://baidu.com</a>这是第一个A标签, <a href="http://blog.baidu.com">成长脚印-专注于互联网发展</a>这是第二个A标签。 <a href="https://www.phpfensi.com" target="_blank">https://www.phpfensi.com</a>这是第一个需要被提取的URL地址, <a href="http://blog.baidu.com" target="_blank">http://blog.baidu.com</a>这是第二个需要被提取的URL地址。 
  2. <img border="0" alt="" src="http://baidu.com/css/sitelogo_zh-cn.gif">,这是一个IMG标签 

即为我们想要的内容。

例2,代码如下:

  1. /** 
  2.  * PHP 版本 在 Silva 代码的基础上修改的 
  3.  * 将URL地址转化为完整的A标签链接代码 
  4.  */ 
  5.  
  6. function replace_URLtolink($text) { 
  7.     // grab anything that looks like a URL... 
  8.     $urls = array(); 
  9.  
  10.     // build the patterns 
  11.     $scheme = '(https?://|ftps?://)?'
  12.     $www = '([w]+.)'
  13.     $ip = '(d{1,3}.d{1,3}.d{1,3}.d{1,3})'
  14.     $name = '([w0-9]+)'
  15.     $tld = '(w{2,4})'
  16.     $port = '(:[0-9]+)?'
  17.     $the_rest = '(/?([w#!:.?+=&%@!-/]+))?'
  18.     $pattern = $scheme.'('.$ip.$port.'|'.$www.$name.$tld.$port.')'.$the_rest
  19.     $pattern = '/'.$pattern.'/is'
  20.  
  21.     // Get the URLs 
  22.     $c = preg_match_all($pattern$text$m); 
  23.  
  24.     if ($c) { 
  25.         $urls = $m[0]; 
  26.     } 
  27.  
  28.     // Replace all the URLs 
  29.     if (! emptyempty($urls)) { 
  30.         foreach ($urls as $url) { 
  31.             $pos = strpos('http://'$url); 
  32.  
  33.             if (($pos && $pos != 0) || !$pos) { 
  34.                 $fullurl = 'http://'.$url
  35.             } else { 
  36.                 $fullurl = $url
  37.             } 
  38.  
  39.             $link = ''.$url.''
  40.  
  41.             $text = str_replace($url$link$text); 
  42.         } 
  43.     } 
  44.  
  45.     return $text

Tags: ph地址转化

分享到: