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数组是否为空的代码
Sep 08 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
Jun 13 PHP
服务器变量 $_SERVER 的深入解析
Jul 02 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
Sep 30 PHP
解决php接收shell返回的结果中文乱码问题
Jan 23 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
Jul 10 PHP
PHP实现C#山寨ArrayList的方法
Jul 16 PHP
PHP单例模式简单用法示例
Jun 23 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
ThinkPHP5 的简单搭建和使用详解
Nov 15 PHP
PHP如何将图片文件上传到另外一台服务器上
Aug 26 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 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
综合图片计数器
2006/10/09 PHP
Thinkphp实现MySQL读写分离操作示例
2014/06/25 PHP
PHP常用的三种设计模式
2017/02/17 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
javascript 冒号 使用说明
2009/06/06 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
理解Javascript闭包
2013/11/01 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
go和python调用其它程序并得到程序输出
2014/02/10 Python
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
python中 logging的使用详解
2017/10/25 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
python解析xml简单示例
2019/06/21 Python
Python hashlib模块加密过程解析
2019/11/05 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
升职自荐信范文
2013/10/05 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
保险内勤岗位职责
2014/04/05 职场文书
党员群众路线承诺书
2014/05/20 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
具结保证书范本
2015/05/11 职场文书
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
Python+Appium自动化测试的实战
2021/06/30 Python
Java设计模式中的命令模式
2022/04/28 Java/Android
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js