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 将bmp图片转为jpg等其他任意格式的图片
Jun 21 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
Sep 30 PHP
浅析PHP原理之变量(Variables inside PHP)
Aug 09 PHP
PHP中spl_autoload_register函数的用法总结
Nov 07 PHP
ThinkPHP验证码和分页实例教程
Aug 22 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 PHP
学习PHP Cookie处理函数
Aug 09 PHP
PHP-CGI远程代码执行漏洞分析与防范
May 07 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
php-app开发接口加密详解
Apr 18 PHP
PHP实现的敏感词过滤方法示例
Mar 06 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 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的日期与时间函数技巧
2008/04/24 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
php上传excel表格并获取数据
2017/04/27 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
DIV菜单层实现代码
2010/11/19 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
js命名空间写法示例
2015/12/18 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
JavaScript事件详细讲解
2016/06/27 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
python脚本实现查找webshell的方法
2014/07/31 Python
Python简单计算数组元素平均值的方法示例
2017/12/26 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
python实现梯度法 python最速下降法
2020/03/24 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
python基于opencv 实现图像时钟
2021/01/04 Python
荷兰音乐会和音乐剧门票订购网站:Topticketshop
2019/08/27 全球购物
行政主管岗位职责
2013/11/18 职场文书
网上签名寄语活动留言
2014/01/18 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
围城读书笔记
2015/06/26 职场文书
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android