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学习笔记 类的声明与对象实例化
Jun 13 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
php输出金字塔的2种实现方法
Dec 16 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
Dec 17 PHP
php使用类继承解决代码重复的问题
Feb 11 PHP
php检测url是否存在的方法
Apr 14 PHP
PHP模板引擎Smarty内置变量调解器用法详解
Apr 11 PHP
PHP输出XML格式数据的方法总结
Feb 08 PHP
thinkPHP5使用Rabc实现权限管理
Aug 28 PHP
php获取微信openid方法总结
Oct 10 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
Oct 24 PHP
PHP实现递归的三种方法
Jul 04 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
php读取数据库信息的几种方法
2008/05/24 PHP
php 结果集的分页实现代码
2009/03/10 PHP
PHP 获取文件权限函数介绍
2013/07/11 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
jQuery 性能优化指南(2)
2009/05/21 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
Python-基础-入门 简介
2014/08/09 Python
Python循环语句中else的用法总结
2016/09/11 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
深入浅析Python中的迭代器
2019/06/04 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
基于Django统计博客文章阅读量
2019/10/29 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
法律七进实施方案
2014/03/15 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL
Django+Celery实现定时任务的示例
2021/06/23 Python
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server