PHP文章采集URL补全函数(FormatUrl)


Posted in PHP onAugust 02, 2012

写采集必用的函数,URL补全函数,也可叫做FormatUrl。
写此函数作用就是为了开发采集程序,采集文章的时候会经常遇到页面里的路径是 “相对路径” 或者 “绝对根路径” 不是“绝对全路径”就无法收集URL。

所以,就需要本功能函数进行对代码进行格式化,把所有的超链接都格式化一遍,这样就可以直接收集到正确的URL了。

路径知识普及
相对路径:“../” “./” 或者前面什么都不加
绝对根路径:/path/xxx.html
绝对全路径:http://www.xxx.com/path/xxx.html
使用实例:

<?php 
$surl="https://3water.com/"; 
$gethtm = '<a href="/index.htm">首页</a><a href="Resolvent/index.htm">解决方案</a>'; 
echo formaturl($gethtm,$surl); 
?>

输出:<a href="https://3water.com/index.htm">首页</a><a href="https://3water.com/Resolvent/index.htm">解决方案</a>
--------- 演示实例 ------------
原始路径代码:http://www.newnew.cn/newnewindex.aspx
输出演示代码:http://www.maifp.com/aaa/test.php
以下是函数代码
<?php 
function formaturl($l1,$l2){ 
if (preg_match_all("/(<img[^>]+src=\"([^\"]+)\"[^>]*>)|(<a[^>]+href=\"([^\"]+)\"[^>]*>)|(<img[^>]+src='([^']+)'[^>]*>)|(<a[^>]+href='([^']+)'[^>]*>)/i",$l1,$regs)){ 
foreach($regs[0] as $num => $url){ 
$l1 = str_replace($url,lIIIIl($url,$l2),$l1); 
} 
} 
return $l1; 
} 
function lIIIIl($l1,$l2){ 
if(preg_match("/(.*)(href|src)\=(.+?)( |\/\>|\>).*/i",$l1,$regs)){$I2 = $regs[3];} 
if(strlen($I2)>0){ 
$I1 = str_replace(chr(34),"",$I2); 
$I1 = str_replace(chr(39),"",$I1); 
}else{return $l1;} 
$url_parsed = parse_url($l2); 
$scheme = $url_parsed["scheme"];if($scheme!=""){$scheme = $scheme."://";} 
$host = $url_parsed["host"]; 
$l3 = $scheme.$host; 
if(strlen($l3)==0){return $l1;} 
$path = dirname($url_parsed["path"]);if($path[0]=="\\"){$path="";} 
$pos = strpos($I1,"#"); 
if($pos>0) $I1 = substr($I1,0,$pos); 
//判断类型 
if(preg_match("/^(http|https|ftp):(\/\/|\\\\)(([\w\/\\\+\-~`@:%])+\.)+([\w\/\\\.\=\?\+\-~`@\':!%#]|(&)|&)+/i",$I1)){return $l1; }//http开头的url类型要跳过 
elseif($I1[0]=="/"){$I1 = $l3.$I1;}//绝对路径 
elseif(substr($I1,0,3)=="../"){//相对路径 
while(substr($I1,0,3)=="../"){ 
$I1 = substr($I1,strlen($I1)-(strlen($I1)-3),strlen($I1)-3); 
if(strlen($path)>0){ 
$path = dirname($path); 
} 
} 
$I1 = $l3.$path."/".$I1; 
} 
elseif(substr($I1,0,2)=="./"){ 
$I1 = $l3.$path.substr($I1,strlen($I1)-(strlen($I1)-1),strlen($I1)-1); 
} 
elseif(strtolower(substr($I1,0,7))=="mailto:"||strtolower(substr($I1,0,11))=="javascript:"){ 
return $l1; 
}else{ 
$I1 = $l3.$path."/".$I1; 
} 
return str_replace($I2,"\"$I1\"",$l1); 
} 
?>

下面的链接是学习PHP正则表达式的地方。在这里留个链接,防止丢失。。。
PHP 相关文章推荐
php 常用字符串函数总结
Mar 15 PHP
php与php MySQL 之间的关系
Jul 17 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
Jun 14 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
Yii扩展组件编写方法实例分析
Jun 29 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
Smarty模板变量调节器用法分析
May 23 PHP
详解PHP安装mysql.so扩展的方法
Dec 31 PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
Mar 09 PHP
PHP服务器页面间跳转实现方法
Aug 02 #PHP
php中3des加密代码(完全与.net中的兼容)
Aug 02 #PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 #PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
Jul 31 #PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
Jul 31 #PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
Jul 31 #PHP
php切割页面div内容的实现代码分享
Jul 31 #PHP
You might like
PHP程序开发范例学习之表单 获取文本框的值
2011/08/08 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
根据鼠标的位置动态的控制层的位置
2009/11/24 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
Javascript图像处理—为矩阵添加常用方法
2012/12/27 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
jquery对元素拖动排序示例
2014/01/16 Javascript
用JavaScript实现类似于ListBox功能示例代码
2014/03/09 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
js实现圆盘记速表
2015/08/03 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
python端口扫描系统实现方法
2014/11/19 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
Python基础教程之异常详解
2019/01/10 Python
Python3几个常见问题的处理方法
2019/02/26 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
考博导师推荐信范文
2015/03/27 职场文书
公司周年庆寄语
2019/06/21 职场文书
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android