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可变函数的使用详解
Jun 14 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
Aug 06 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
Jun 30 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
Nov 29 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
php简单实现多语言切换的方法
May 09 PHP
PHP 5.6.11中CURL模块问题的解决方法
Aug 08 PHP
详解PHP处理密码的几种方式
Nov 30 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
May 08 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
Sep 20 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
Oct 11 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中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
vue与TypeScript集成配置最简教程(推荐)
2017/10/17 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
微信小程序项目总结之点赞 删除列表 分享功能
2018/06/25 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
Python实现将文本生成二维码的方法示例
2017/07/18 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
Python输出各行命令详解
2018/02/01 Python
python3判断url链接是否为404的方法
2018/08/10 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
2019/03/13 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
super关键字的用法
2012/04/10 面试题
新年抽奖获奖感言
2014/03/02 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
工厂采购员岗位职责
2015/04/07 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript
Python tensorflow卷积神经Inception V3网络结构
2022/05/06 Python
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技