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 相关文章推荐
将OICQ数据转成MYSQL数据
Oct 09 PHP
php AJAX实例根据邮编自动完成地址信息
Nov 23 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
PHP fopen 读取带中文URL地址的一点见解
Sep 25 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
Jan 09 PHP
php不使用插件导出excel的简单方法
Mar 04 PHP
ThinkPHP之getField详解
Jun 20 PHP
PHP程序员不应该忽略的3点
Oct 09 PHP
PHP中的静态变量及static静态变量使用详解
Nov 05 PHP
smarty中改进truncate使其支持中文的方法
May 30 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 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函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
jquery获取自定义属性(attr和prop)实例介绍
2013/04/21 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
Vue动态实现评分效果
2017/05/24 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
2017/10/31 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
2018/12/29 jQuery
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
广告学专业推荐信范文
2013/11/23 职场文书
求职信模板怎么做
2014/01/26 职场文书
《孔子游春》教学反思
2014/02/25 职场文书
幼儿园秋游感想
2014/03/12 职场文书
产品质量承诺书
2014/03/27 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
教师业务培训方案
2014/05/01 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
党支部创先争优公开承诺书
2015/04/30 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书