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

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

写采集必用的函数,URL补全函数,也可叫做FormatUrl。

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

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

路径知识普及

相对路径:“../” “./” 或者前面什么都不加

绝对根路径:/path/xxx.html

绝对全路径:http://www.xxx.com/path/xxx.html

使用实例:

复制代码 代码如下:

$surl=”http://www.jb51.net/”;

$gethtm = ‘首页解决方案’;

echo formaturl($gethtm,$surl);

?>

输出:首页解决方案

——— 演示实例 ————

原始路径代码:http://www.newnew.cn/newnewindex.aspx

输出演示代码:http://www.maifp.com/aaa/test.php

以下是函数代码

复制代码 代码如下:

function formaturl($l1,$l2){

if (preg_match_all(“/(]+src=”([^”]+)”[^>]*>)|(]+href=”([^”]+)”[^>]*>)|(]+src='([^’]+)'[^>]*>)|(]+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正则表达式的地方。在这里留个链接,防止丢失。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值