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 相关文章推荐
一个ftp类(ini.php)
Oct 09 PHP
PHP输出控制功能在简繁体转换中的应用
Oct 09 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
php中的strpos使用示例
Feb 27 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
PHP实现查询两个数组中不同元素的方法
Feb 23 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
Aug 10 PHP
PHP静态延迟绑定和普通静态效率的对比
Oct 20 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
php创建类并调用的实例方法
Sep 25 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 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
使用 MySQL Date/Time 类型
2008/03/26 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
2014/06/24 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
javascript引用对象的方法代码
2007/08/13 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
前端js文件合并的三种方式推荐
2016/05/19 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
解决layui数据表格table的横向滚动条显示问题
2019/09/04 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
vue实现移动端拖动排序
2020/08/21 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
python实现随机密码字典生成器示例
2014/04/09 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
大学生个人自我鉴定
2013/12/03 职场文书
如何客观的进行自我评价
2013/12/17 职场文书
商场消防管理制度
2014/01/12 职场文书
市场专员岗位职责
2014/02/14 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
2014年计生标语
2014/06/23 职场文书
2015年复活节活动总结
2015/02/27 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
【海涛教你打dota】体验一超神发条:咱是抢盾专业户
2022/04/01 DOTA
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技