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中的插件机制原理和实例
Jul 08 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
php字符串函数学习之strstr()
Mar 27 PHP
php实现简单的上传进度条
Nov 17 PHP
php类的自动加载操作实例详解
Sep 28 PHP
PHP微信PC二维码登陆的实现思路
Jul 13 PHP
ThinkPHP5框架实现简单的批量查询功能示例
Jun 07 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 17 PHP
PHP命名空间简单用法示例
Dec 28 PHP
Laravel框架中集成MongoDB和使用详解
Oct 17 PHP
如何在Mac上通过docker配置PHP开发环境
May 29 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 5.0对象模型深度探索之对象复制
2008/03/27 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
python字符串,数值计算
2016/10/05 Python
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
Python使用三种方法实现PCA算法
2017/12/12 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
python palywright库基本使用
2021/01/21 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
简单介绍Object类的功能、常用方法
2013/10/02 面试题
大学生个人简历自我评价
2013/11/16 职场文书
考试没考好检讨书
2014/01/31 职场文书
房屋委托书范本
2014/04/04 职场文书
爱心活动计划书
2014/04/26 职场文书
安全技术说明书
2014/05/09 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
党员公开承诺书2015
2015/01/21 职场文书
超市采购员岗位职责
2015/04/07 职场文书
2015年学生管理工作总结
2015/05/26 职场文书
网络营销实训总结
2015/08/03 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL