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 preg_match_all结合str_replace替换内容中所有img
Oct 11 PHP
关于php curl获取301或302转向的网址问题的解决方法
Jun 02 PHP
url decode problem 解决方法
Dec 26 PHP
php cookie使用方法学习笔记分享
Nov 07 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
Mar 05 PHP
如何利用http协议发布博客园博文评论
Aug 03 PHP
php生成静态html页面的方法(2种方法)
Sep 14 PHP
php单例模式的简单实现方法
Jun 10 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 PHP
php PDO属性设置与操作方法分析
Dec 27 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
Php做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
表单复选框向PHP传输数据的代码
2007/11/13 PHP
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
全面解析vue中的数据双向绑定
2017/05/10 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
vue实现直播间点赞飘心效果的示例代码
2019/09/20 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
python读取文件名称生成list的方法
2018/04/27 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
竞选大队长演讲稿
2014/04/29 职场文书
项目工作说明书
2014/07/29 职场文书
敬业奉献模范事迹材料
2014/12/24 职场文书
2016新年年会主持词
2015/07/06 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书