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
Linux Apache PHP Oracle 安装配置(具体操作步骤)
Jun 17 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
一个比较不错的PHP日历类分享
Nov 18 PHP
php目录遍历函数opendir用法实例
Nov 20 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
Feb 02 PHP
php使用指定编码导出mysql数据到csv文件的方法
Mar 31 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
深入解析PHP的Yii框架中的缓存功能
Mar 29 PHP
ThinkPHP框架实现FTP图片上传功能示例
Apr 08 PHP
微信小程序发送订阅消息的方法(php 为例)
Oct 30 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
Sep 13 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
1.PHP简介
2006/10/09 PHP
Window下PHP三种运行方式图文详解
2013/06/11 PHP
php二维数组用键名分组相加实例函数
2013/11/06 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
2018/05/04 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
python二叉树的实现实例
2013/11/21 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
Python实时获取cmd的输出
2015/12/13 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
Python3 pickle对象串行化代码实例解析
2020/03/23 Python
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
大学生自我鉴定评语
2014/01/27 职场文书
幼儿教师工作感言
2014/02/14 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
springboot用户数据修改的详细实现
2022/04/06 Java/Android