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.ini中的php-5.2.0配置指令详解
Mar 27 PHP
php中配置文件操作 如config.php文件的读取修改等操作
Jul 07 PHP
destoon实现首页显示供应、企业、资讯条数的方法
Jul 15 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
Nov 19 PHP
php中adodbzip类实例
Dec 08 PHP
帝国cms目录结构分享
Jul 06 PHP
php连接oracle数据库的方法(测试成功)
May 26 PHP
基于php编程规范(详解)
Aug 17 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
php微信公众号开发之关键词回复
Oct 20 PHP
PHP使用Redis实现Session共享的实现示例
May 12 PHP
laravel 5.5 关闭token的3种实现方式
Oct 24 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中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
2017/01/21 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
jQuery对象与DOM对象之间的相互转换
2015/03/03 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
Highcharts学习之数据列
2016/08/03 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
简单介绍react redux的中间件的使用
2018/04/06 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
JS实现的tab切换并显示相应内容模块功能示例
2019/08/03 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
使用python加密自己的密码
2015/08/04 Python
PyQt 线程类 QThread使用详解
2017/07/16 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
解决python执行不输出系统命令弹框的问题
2019/06/24 Python
荷兰本土平价百货:HEMA
2017/10/23 全球购物
意大利值得信赖的在线超级药房:PillolaStore
2020/02/05 全球购物
培训主管的岗位职责
2013/11/23 职场文书
市场营销求职信范文
2014/02/21 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
公路绿化方案
2014/05/12 职场文书
团队拓展活动总结
2014/08/27 职场文书
团员年度个人总结
2015/02/26 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
浅谈Node的内存泄露问题
2022/05/06 NodeJs