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


Posted in PHP onJanuary 17, 2014

需要提取的内容如下:

<a href="http://baidu.com">http://baidu.com</a>这是第一个A标签,
<a href="http://blog.baidu.com">成长脚印-专注于互联网发展</a>这是第二个A标签。
https://3water.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标签便解决了。

function linkAdd($content){
 //提取替换出所有A标签(统一标记<{link}>)
 preg_match_all('/<a.*?href=".*?".*?>.*?</a>/i',$content,$linkList);
 $linkList=$linkList[0];
 $str=preg_replace('/<a.*?href=".*?".*?>.*?</a>/i','<{link}>',$content);
 //提取替换出所有的IMG标签(统一标记<{img}>)
 preg_match_all('/<img[^>]+>/im',$content,$imgList);
 $imgList=$imgList[0];
 $str=preg_replace('/<img[^>]+>/im','<{img}>',$str);
 //提取替换标准的URL地址
 $str=preg_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_/+.~#?&//=]+)','<a href="\0" target="_blank">\0</a>',$str);
 //还原A统一标记为原来的A标签
 $arrLen=count($linkList);
 for($i=0;$i<$arrLen;$i++){
  $str=preg_replace('/<{link}>/',$linkList[$i],$str,1); 
 }
 //还原IMG统一标记为原来的IMG标签
 $arrLen2=count($imgList);
 for($i=0;$i<$arrLen2;$i++){
  $str=preg_replace('/<{img}>/',$imgList[$i],$str,1); 
 }
 return $str;
}
$content='
<a href="http://baidu.com">http://baidu.com</a>这是第一个A标签,
<a href="http://blog.baidu.com">成长脚印-专注于互联网发展</a>这是第二个A标签。
https://3water.com这是第一个需要被提取的URL地址,
http://blog.baidu.com这是第二个需要被提取的URL地址。
<img border="0" alt="" src="http://baidu.com/css/sitelogo_zh-cn.gif">,这是一个IMG标签';
echo linkAdd($content);

返回的内容为:
<a href="http://baidu.com">http://baidu.com</a>这是第一个A标签, <a href="http://blog.baidu.com">成长脚印-专注于互联网发展</a>这是第二个A标签。 <a href="https://3water.com" target="_blank">https://3water.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,

/**
 * PHP 版本 在 Silva 代码的基础上修改的
 * 将URL地址转化为完整的A标签链接代码
 */
function replace_URLtolink($text) {
    // grab anything that looks like a URL...
    $urls = array();
    // build the patterns
    $scheme = '(https?://|ftps?://)?';
    $www = '([w]+.)';
    $ip = '(d{1,3}.d{1,3}.d{1,3}.d{1,3})';
    $name = '([w0-9]+)';
    $tld = '(w{2,4})';
    $port = '(:[0-9]+)?';
    $the_rest = '(/?([w#!:.?+=&%@!-/]+))?';
    $pattern = $scheme.'('.$ip.$port.'|'.$www.$name.$tld.$port.')'.$the_rest;
    $pattern = '/'.$pattern.'/is';
    // Get the URLs
    $c = preg_match_all($pattern, $text, $m);
    if ($c) {
        $urls = $m[0];
    }
    // Replace all the URLs
    if (! empty($urls)) {
        foreach ($urls as $url) {
            $pos = strpos('http://', $url);
            if (($pos && $pos != 0) || !$pos) {
                $fullurl = 'http://'.$url;
            } else {
                $fullurl = $url;
            }
            $link = ''.$url.'';
            $text = str_replace($url, $link, $text);
        }
    }
    return $text;
}
PHP 相关文章推荐
一个程序下载的管理程序(一)
Oct 09 PHP
php 中文字符入库或显示乱码问题的解决方法
Apr 12 PHP
PHP+JS+rsa数据加密传输实现代码
Mar 23 PHP
PHP 遍历文件实现代码
May 04 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
基于Linux调试工具strace与gdb的常用命令总结
Jun 03 PHP
Codeigniter(CI)框架分页函数及相关知识
Nov 03 PHP
PHP分页类集锦
Nov 18 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
Mar 18 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
PHP面向对象之事务脚本模式(详解)
Jun 07 PHP
php 检查电子邮件函数(自写)
Jan 16 #PHP
php mail to 配置详解
Jan 16 #PHP
php生成txt文件标题及内容的方法
Jan 16 #PHP
PHP获取php,mysql,apche的版本信息示例代码
Jan 16 #PHP
php获取淘宝分类id示例
Jan 16 #PHP
php生成数组的使用示例 php全组合算法
Jan 16 #PHP
PHP 动态生成静态HTML页面示例代码
Jan 15 #PHP
You might like
PHP cron中的批处理
2008/09/16 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
layui添加动态菜单与选项卡
2019/07/26 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
python二叉树遍历的实现方法
2013/11/21 Python
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
初步认识Python中的列表与位运算符
2015/10/12 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
python实现名片管理系统
2018/11/29 Python
详解python中@的用法
2019/03/27 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
对于Python深浅拷贝的理解
2019/07/29 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
什么时候用assert
2015/05/08 面试题
三分钟英语演讲稿
2014/04/24 职场文书
洗手间标语
2014/06/23 职场文书
2014幼儿园教师师德师风演讲稿
2014/09/10 职场文书
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL