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
基于文本的搜索
Oct 09 PHP
PHP删除特定数组内容并且重建数组索引的方法.
Mar 25 PHP
php 中英文语言转换类代码
Aug 11 PHP
php中利用str_pad函数生成数字递增形式的产品编号
Sep 30 PHP
一个好用的PHP验证码类实例分享
Dec 27 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
微信公众号模板消息群发php代码示例
Dec 29 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
Oct 26 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
May 27 PHP
PHP针对redis常用操作实例详解
Aug 17 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 常用类汇总 推荐收藏
2010/05/13 PHP
关于crontab的使用详解
2013/06/24 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
jQuery实现在列表的首行添加数据
2015/05/19 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
AngularJS基础 ng-keyup 指令简单示例
2016/08/02 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
商场中秋节活动方案
2014/02/07 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
伊琍体标语
2014/06/25 职场文书
小班下学期幼儿评语
2014/12/30 职场文书
交通事故协议书范本
2016/03/19 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书