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 相关文章推荐
提升PHP执行速度全攻略(上)
Oct 09 PHP
PHP 魔术函数使用说明
May 14 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
Jul 22 PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 PHP
学习php设计模式 php实现合成模式(composite)
Dec 08 PHP
thinkPHP中配置的读取与C方法详解
Dec 05 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
Oct 20 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 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的一个登录的类 [推荐]
2007/03/16 PHP
php adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
PHP垃圾回收机制引用计数器概念分析
2013/06/24 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
Zend Framework入门知识点小结
2016/03/19 PHP
浅析php静态方法与非静态方法的用法区别
2016/05/17 PHP
浅谈php处理后端&amp;接口访问超时的解决方法
2016/10/29 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
2016/05/20 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
node.js文件上传重命名以及移动位置的示例代码
2018/01/19 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
在Python中操作字典之clear()方法的使用
2015/05/21 Python
利用python获取Ping结果示例代码
2017/07/06 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
Django开发的简易留言板案例详解
2018/12/04 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
请说出以下代码输出什么
2013/08/30 面试题
kfc实习自我鉴定
2013/12/14 职场文书
纠风工作实施方案
2014/03/15 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
给病人的慰问信
2015/03/23 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
初一数学教学反思
2016/02/17 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
2019年亲子运动会口号
2019/10/11 职场文书