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+DBM的同学录程序(4)
Oct 09 PHP
php 无限级数据JSON格式及JS解析
Jul 17 PHP
深入解析php中的foreach问题
Jun 30 PHP
如何在php中正确的使用json
Aug 06 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
PHP使用递归方式列出当前目录下所有文件的方法
Jun 02 PHP
php+ajax无刷新上传图片实例代码
Nov 17 PHP
PHP中的session安全吗?
Jan 22 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
Mar 14 PHP
php获取用户真实IP和防刷机制的实例代码
Nov 28 PHP
Laravel解决nesting level错误和隐藏index.php的问题
Oct 12 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 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
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
PHP准确取得服务器IP地址的方法
2015/06/02 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
react的hooks的用法详解
2020/10/12 Javascript
详解Python函数作用域的LEGB顺序
2016/05/14 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
Python编程之string相关操作实例详解
2017/07/22 Python
windows下python安装小白入门教程
2018/09/18 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
应届大学生的推荐信
2013/11/20 职场文书
《我的伯父鲁迅先生》教学反思
2014/02/12 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
促销活动总结怎么写
2014/06/25 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
质量负责人岗位职责
2015/02/15 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python
vue实现登陆页面开发实践
2022/05/30 Vue.js