php解析字符串里所有URL地址的方法


Posted in PHP onApril 03, 2015

本文实例讲述了php解析字符串里所有URL地址的方法。分享给大家供大家参考。具体如下:

<?php
// $html = the html on the page
// $current_url = the full url that the html came from
//(only needed for $repath)
// $repath = converts ../ and / and // urls to full valid urls
function pageLinks($html, $current_url = "", $repath = false){
  preg_match_all("/\<a.+?href=(\"|')(?!javascript:|#)(.+?)(\"|')/i", $html, $matches);
  $links = array();
  if(isset($matches[2])){
    $links = $matches[2];
  }
  if($repath && count($links) > 0 && strlen($current_url) > 0){
    $pathi   = pathinfo($current_url);
    $dir    = $pathi["dirname"];
    $base    = parse_url($current_url);
    $split_path = explode("/", $dir);
    $url    = "";
    foreach($links as $k => $link){
      if(preg_match("/^\.\./", $link)){
        $total = substr_count($link, "../");
        for($i = 0; $i < $total; $i++){
          array_pop($split_path);
        }
        $url = implode("/", $split_path) . "/" . str_replace("../", "", $link);
      }elseif(preg_match("/^\/\//", $link)){
        $url = $base["scheme"] . ":" . $link;
      }elseif(preg_match("/^\/|^.\//", $link)){
        $url = $base["scheme"] . "://" . $base["host"] . $link;
      }elseif(preg_match("/^[a-zA-Z0-9]/", $link)){
        if(preg_match("/^http/", $link)){
          $url = $link;
        }else{
          $url    = $dir . "/" . $link;
        }
      }
      $links[$k] = $url;
    }
  }
  return $links;
}
header("content-type: text/plain");
$url = "https://3water.com";
$html = file_get_contents($url);
// Gets links from the page:
print_r(pageLinks($html));
// Gets links from the page and formats them to a full valid url:
print_r(pageLinks($html, $url, true));

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP写的求多项式导数的函数代码
Jul 04 PHP
php取整函数ceil,floo,round的用法及介绍
Aug 31 PHP
php的慢速日志引起的Mysql错误问题分析
May 13 PHP
神盾加密解密教程(二)PHP 神盾解密
Jun 08 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
完整删除ecshop中获取店铺信息的API
Dec 24 PHP
php通过Chianz.com获取IP地址与地区的方法
Jan 14 PHP
对比分析php中Cookie与Session的异同
Feb 19 PHP
php实现头像上传预览功能
Apr 27 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
May 04 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
php workerman定时任务的实现代码
Dec 23 PHP
php对文件进行hash运算的方法
Apr 03 #PHP
php计算给定时间之前的函数用法实例
Apr 03 #PHP
php实现的mongodb操作类实例
Apr 03 #PHP
PHP中判断文件存在使用is_file还是file_exists?
Apr 03 #PHP
php专用数组排序类ArraySortUtil用法实例
Apr 03 #PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 #PHP
PHP中返回引用类型的方法
Apr 03 #PHP
You might like
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
php微信开发之上传临时素材
2016/06/24 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
Javascript验证方法大全
2015/09/21 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
Python实现八大排序算法
2016/08/13 Python
Python中字典的setdefault()方法教程
2017/02/07 Python
python实现简单中文词频统计示例
2017/11/08 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
Python logging模块用法示例
2018/08/28 Python
python+selenium实现QQ邮箱自动发送功能
2019/01/23 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
django迁移数据库错误问题解决
2019/07/29 Python
python实现XML解析的方法解析
2019/11/16 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
医药工作者的求职信范文
2013/09/21 职场文书
幼师求职自荐信范文
2014/01/26 职场文书
《自选商场》教学反思
2014/02/14 职场文书
财务务虚会发言材料
2014/10/20 职场文书
2015年教导处教学工作总结
2015/07/22 职场文书