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下用GD生成生成缩略图的两个选择和区别
Apr 17 PHP
来自phpguru得Php Cache类源码
Apr 15 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
Jun 08 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
PHP判断表单复选框选中状态完整例子
Jun 24 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
Dec 24 PHP
CI(Codeigniter)的Setting增强配置类实例
Jan 06 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
基于php实现的php代码加密解密类完整实例
Oct 12 PHP
PHP对XML内容进行修改和删除实例代码
Oct 26 PHP
使用 laravel sms 构建短信验证码发送校验功能
Nov 06 PHP
php 函数中静态变量使用的问题实例分析
Mar 05 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实现多级树型菜单
2006/10/09 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
PHP获取文件扩展名的方法实例总结
2017/06/10 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
2011/04/06 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
2017/03/04 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
javascript实现抢购倒计时程序
2019/08/26 Javascript
JS+CSS实现随机点名(实例代码)
2019/11/04 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
Python实现Linux命令xxd -i功能
2016/03/06 Python
Python实现注册登录系统
2017/08/08 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
Python 数据库操作 SQLAlchemy的示例代码
2019/02/18 Python
wxPython实现分隔窗口
2019/11/19 Python
Python是怎样处理json模块的
2020/07/16 Python
Django 实现图片上传和下载功能
2020/12/31 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
2021/03/03 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
董事长岗位职责
2013/11/30 职场文书
实习生求职自荐信
2014/02/07 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
毕业生面试求职信
2014/06/23 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android