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

php将URL地址转化为完整的A标签链接代码

发布:smiling 来源: PHP粉丝网  添加日期:2014-06-30 12:15:50 浏览: 评论:0 

前面介绍过js把文本链接转换成A标签,现在看一个php的方法,这个是在 Silva 代码的基础上修改的,如果有不完善的地方大家可提出来.

需要提取的内容如下:

<a href="http://baidu.com">http://baidu.com</a>这是第一个A标签,

<a href="http://blog.baidu.com">成长脚印-专注于互联网发展</a>这是第二个A标签。

http://www.phpfensi.com这是第一个需要被提取的URL地址,

http://blog.baidu.com这是第二个需要被提取的URL地址'。

<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. http://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); 

返回的内容为:

<a href="http://baidu.com">http://baidu.com</a>这是第一个A标签, <a href="http://blog.baidu.com">成长脚印-专注于互联网发展</a>这是第二个A标签。 <a href="http://www.phpfensi.com" target="_blank">http://www.phpfensi.com</a>这是第一个需要被提取的URL地址, <a href="http://blog.baidu.com" target="_blank">http://blog.baidu.com</a>这是第二个需要被提取的URL地址。

<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.  NAME        : replace_URLtolink() 
  7.  VERSION     : 1.0 
  8.  AUTHOR      : J de Silva 
  9.  DESCRIPTION : returns VOID; handles converting 
  10.  URLs into clickable links off a string. 
  11.  TYPE        : functions 
  12.  ============================================= */ 
  13.  
  14. function replace_URLtolink($text) { 
  15.     // grab anything that looks like a URL... 
  16.     $urls = array(); 
  17.      
  18.     // build the patterns 
  19.     $scheme = '(https?://|ftps?://)?'
  20.     $www = '([w]+.)'
  21.     $ip = '(d{1,3}.d{1,3}.d{1,3}.d{1,3})'
  22.     $name = '([w0-9]+)'
  23.     $tld = '(w{2,4})'
  24.     $port = '(:[0-9]+)?'
  25.     $the_rest = '(/?([w#!:.?+=&%@!-/]+))?'
  26.     $pattern = $scheme.'('.$ip.$port.'|'.$www.$name.$tld.$port.')'.$the_rest
  27.     $pattern = '/'.$pattern.'/is'
  28.      
  29.     // Get the URLs 
  30.     $c = preg_match_all($pattern$text$m); 
  31.      
  32.     if ($c) { 
  33.         $urls = $m[0]; 
  34.     } 
  35.      
  36.     // Replace all the URLs 
  37.     if (! emptyempty($urls)) { 
  38.         foreach ($urls as $url) { 
  39.             $pos = strpos('http://'$url); 
  40.              
  41.             if (($pos && $pos != 0) || !$pos) { 
  42.                 $fullurl = 'http://'.$url
  43.             } else { 
  44.                 $fullurl = $url
  45.             } 
  46.              
  47.             $link = ''.$url.''
  48.              
  49.             $text = str_replace($url$link$text); 
  50.         } 
  51.     } 
  52.      
  53.     return $text

例一测试过,例二没有测试过大家测试一下看那个好用用那个吧.

Tags: URL地址 转化A标签

分享到: