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 相关文章推荐
php5.2时间相差8小时
Jan 15 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
使用php实现下载生成某链接快捷方式的解决方法
May 07 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
Jun 24 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 PHP
PHP下载生成的csv文件及问题总结
Aug 06 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
Feb 15 PHP
thinkphp 验证码 的使用小结
May 07 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
Apr 16 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 PHP
PHP中echo与print区别点整理
Mar 09 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
E路文章系统PHP
2006/12/11 PHP
php ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
解javascript 混淆加密收藏
2009/01/16 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
2020/02/06 Javascript
python中Flask框架简单入门实例
2015/03/21 Python
Python3数字求和的实例
2019/02/19 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
2019/08/14 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
Python Selenium参数配置方法解析
2020/01/19 Python
Python count函数使用方法实例解析
2020/03/23 Python
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
员工培训邀请函
2014/02/02 职场文书
一月红领巾广播稿
2014/02/11 职场文书
财务会计实训报告
2014/11/05 职场文书
2014财务年度工作总结
2014/11/11 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
angular异步验证器防抖实例详解
2022/03/31 Javascript