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 图片上添加透明度渐变的效果
Jun 29 PHP
PHP数组内存耗用太多问题的解决方法
Apr 05 PHP
php 上一篇,下一篇文章实现代码与原理说明
May 09 PHP
30 个很棒的PHP开源CMS内容管理系统小结
Oct 14 PHP
深入理解require与require_once与include以及include_once的区别
Jun 05 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 PHP
PIGCMS 如何关闭聊天机器人
Feb 12 PHP
php使用wordwrap格式化文本段落的方法
Mar 17 PHP
php搜索文件程序分享
Oct 30 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
Sep 22 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
一个高ai的分页函数和一个url函数
2006/10/09 PHP
一些使用频率比较高的php函数
2008/10/03 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP针对redis常用操作实例详解
2019/08/17 PHP
学习JavaScript的最佳方法分享
2011/10/21 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
2013/04/01 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
[53:38]OG vs LGD 2018国际邀请赛淘汰赛BO3 第三场 8.26
2018/08/30 DOTA
pygame实现弹力球及其变速效果
2017/07/03 Python
python决策树之CART分类回归树详解
2017/12/20 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
意大利制造的男鞋和女鞋:SCAROSSO
2018/03/07 全球购物
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
工程资料员岗位职责
2014/03/10 职场文书
2015年个人思想总结
2015/03/09 职场文书
作弊检讨书范文
2015/05/06 职场文书
工程款催款函
2015/06/24 职场文书
vue首次渲染全过程
2021/04/21 Vue.js