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 mssql 日期出现中文字符的解决方法
Mar 10 PHP
php 异常处理实现代码
Mar 10 PHP
PHP SQLite类
May 07 PHP
php设计模式 Command(命令模式)
Jun 26 PHP
php文件上传简单实现方法
Jan 24 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
Apr 03 PHP
PHP实现上一篇下一篇的方法实例总结
Sep 22 PHP
PHP基于XMLWriter操作xml的方法分析
Jul 17 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 PHP
PHP新手指南
Apr 01 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查看session内容的函数
2008/08/27 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
javascript 对象比较实现代码
2009/04/27 Javascript
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
JavaScript简介
2015/02/15 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
python 实现插入排序算法
2012/06/05 Python
Python中subprocess模块用法实例详解
2015/05/20 Python
Python编写简单的HTML页面合并脚本
2016/07/11 Python
Python实现简易Web爬虫详解
2018/01/03 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
Python按钮的响应事件详解
2019/03/04 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
django 微信网页授权登陆的实现
2019/07/30 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
拉丁舞学习者的自我评价
2013/10/27 职场文书
社区中秋节活动方案
2014/01/29 职场文书
团队激励口号
2014/06/06 职场文书
公安学专业求职信
2014/07/27 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python
在MySQL中你成功的避开了所有索引
2022/04/20 MySQL