≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > PHP笔记

PHP实现文章采集URL补全函数(FormatUrl)的简单示例

人气:274 时间:2021-10-29

这篇文章主要为大家详细介绍了PHP实现文章采集URL补全函数(FormatUrl)的简单示例,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小玲来看看吧!

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

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

路径知识普及
相对路径:“../” “./” 或者前面什么都不加
绝对根路径:/path/xxx.html
绝对全路径:http://www.xxx.com/path/xxx.html
使用实例:

代码如下:

<?php
/*   四海网 www.q1010.com   */
 
$surl="https://www.q1010.com/"; 
$gethtm = '<a href="/index.htm">首页</a><a href="Resolvent/index.htm">解决方案</a>'; 
echo formaturl($gethtm,$surl); 
?> 

输出:<a href="https://www.q1010.com/index.htm">首页</a><a href="https://www.q1010.com/Resolvent/index.htm">解决方案</a>
--------- 演示实例 ------------
原始路径代码:http://www.newnew.cn/newnewindex.aspx
输出演示代码:http://www.maifp.com/aaa/test.php
以下是函数代码

代码如下:

<?php
/*   四海网 www.q1010.com   */
 
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\/\\\.\=\?\+\-~`@\':!%#]|(&amp;)|&)+/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正则表达式的地方。在这里留个链接,防止丢失。。。

本文来自:http://www.q1010.com/173/16208-0.html

注:关于PHP实现文章采集URL补全函数(FormatUrl)的简单示例的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:文章采集

您可能感兴趣的文章

  • php 文章采集正则的简单示例
上一篇:PHP最常用的2种设计模式工厂模式和单例模式介绍
下一篇:php实现数组首字符过滤功能代码
热门文章
  • PHP 写入WRITE编码为UTF8的文件示例
  • PHP 中文字符串截取函数示例:支持gb2312,gbk,big
  • PHP 简单留言板的制作示例
  • 解决Fatal error: Call to undefined function mb_convert_encoding() in错误问题
  • PHP语言基础(标记、注释、变量、数组、常量、函数)示例
  • php 生成迅雷链接的简单示例
  • php 获取短网址的实现方法
  • PHP 通用分页类的简单示例
  • PHP 使用文件方式导入导出整个MYSQL数据库的实现方法
  • php 获取MYSQL错误的简单示例
  • 最新文章
    • 解决PHP使用redis实现统计缓存MySQL压力的问题
    • php 简单的上传进度条的简单示例
    • php 给html中引用的js和css路径打上版本号的实现方法
    • php 实现计算年龄精准到年月日的实例
    • php+ajax无刷新分页的简单示例
    • 解决php+ajax无刷新上传图片的问题
    • 解决PHP生成HTML静态页面的问题
    • 解决PHP使用uniqid函数生成唯一ID的问题
    • 解决PHP防刷票的一些问题
    • 微信access_token的获取开发的实现方法

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。