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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
PHP详解ASCII码对照表与字符转换
Dec 05 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
PHP生成指定长度随机数最简洁的方法
Jul 14 PHP
跟我学Laravel之配置Laravel
Oct 15 PHP
PHP基于imap获取邮件实例
Nov 11 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
php实现简单的上传进度条
Nov 17 PHP
php阿拉伯数字转中文人民币大写
Dec 21 PHP
php实现连接access数据库并转txt写入的方法
Feb 08 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
PHP高并发和大流量解决方案整理
Mar 09 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
967 个函式
2006/10/09 PHP
php公用函数列表[正则]
2007/02/22 PHP
优化使用mysql存储session的php代码
2008/01/10 PHP
PHP 截取字符串专题集合
2010/08/19 PHP
PHP人民币金额数字转中文大写的函数代码
2013/02/27 PHP
php empty()与isset()区别的详细介绍
2013/06/17 PHP
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
PHP多文件上传类实例
2015/03/07 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
PHP6新特性分析
2016/03/03 PHP
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
javascript Object与Function使用
2010/01/11 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
JS回调函数深入理解
2019/10/16 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
Python入门篇之条件、循环
2014/10/17 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
pytorch 图像预处理之减去均值,除以方差的实例
2020/01/02 Python
使用phonegap进行提示操作的具体方法
2017/03/30 HTML / CSS
学习十八大精神心得体会
2013/12/31 职场文书
应届大专生求职信
2014/06/26 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
老干部座谈会主持词
2015/07/03 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python