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 危险函数解释 分析
Apr 22 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
Aug 31 PHP
基于PHP magic_quotes_gpc的使用方法详解
Jun 24 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
php解析http获取的json字符串变量总是空白null
Mar 02 PHP
PHP实现中文圆形印章特效
Jun 19 PHP
PHP 获取ip地址代码汇总
Jul 05 PHP
PHP中list()函数用法实例简析
Jan 08 PHP
php7函数,声明,返回值等新特性介绍
May 25 PHP
Laravel框架模型的创建及模型对数据操作示例
May 07 PHP
Laravel配合jwt使用的方法实例
Oct 25 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
Python 函数list&amp;read&amp;seek详解
2019/08/28 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
GIVENCHY纪梵希官方旗舰店:高定彩妆与贵族护肤品
2018/04/16 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
微电影大赛策划方案
2014/06/05 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server
Python还能这么玩之只用30行代码从excel提取个人值班表
2021/06/05 Python
python中对列表的删除和添加方法详解
2022/02/24 Python