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+java实现自动新闻滚动窗口
Oct 09 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
Jul 16 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
PHP取二进制文件头快速判断文件类型的实现代码
Aug 05 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
浅析Laravel5中队列的配置及使用
Aug 04 PHP
PHP简单实现数字分页功能示例
Aug 24 PHP
PHP错误和异常处理功能模块示例
Nov 12 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
Nov 18 PHP
php实现微信扫码支付
Mar 26 PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 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
DIY实用性框形天线
2021/03/02 无线电
模板引擎正则表达式调试小技巧
2011/07/20 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
2020/02/10 PHP
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
自定义jQuery选项卡插件实例
2013/03/27 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
禁用Enter键表单自动提交实现代码
2014/05/22 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
纯js模拟div层弹性运动的方法
2015/07/27 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
python爬虫要用到的库总结
2020/07/28 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
GLAMGLOW格莱魅美国官网:美国知名的面膜品牌
2016/12/31 全球购物
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
教师节演讲稿
2014/05/06 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
机械机修工岗位职责
2014/08/03 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
病危通知单
2015/04/17 职场文书
初中班主任教育随笔
2015/08/15 职场文书
javascript的var与let,const之间的区别详解
2022/02/18 Javascript
python字符串的一些常见实用操作
2022/04/06 Python