PHP将相对链接转换为绝对链接
2023-03-07 09:13:47 时间
因为一些学习和研究目的,最近在写一些数据抓取的组件,在网页上很常见的是相对链接,有时候因为所在网页和相对链接的关系不太确定,所以就需要转换一下,本来这个功能实在太简单,直接在网上搜索了一下,但是发现绝大部分代码都是错的,或者说不严谨,随便改一个目录深度就会发生错误。 这里贴一下我的解决方案:
<?php
class spider{
/*
$rel string 相对链接
$baseURL string 当前所在页面完整地址
*/
public function absoluteURL( $rel, $baseURL ): string
{
// 忽略绝对地址
if ( strstr( $rel, 'https:/') || strstr($rel,'http:/') || strstr($rel,':/') ){
return $rel;
}
// 结构化当前URL
$url = parse_url($baseURL);
$rel = trim($rel);
$depthPath = [];
foreach ( explode('/',$url['path']) as $i => $p ){
if( $p != '' ){
$depthPath[] = $p;
}
}
$pathDeep = count($depthPath);
$relDepth = [];
$rootPath = false;
$backPathDepth = 0;
if( strstr($rel,'/') ){
foreach ( explode("/",$rel) as $i => $r){
if( $i==0 && $r == '' ){ // 直接根目录
$rootPath = true;
}
if( $r != '' ){
$relDepth[] = $r;
}
if( $r === '..' ){
$backPathDepth++;
}
}
}else{
$relDepth = [$rel];
}
$new_url = $url['scheme'] . '://' . $url['host'];
if( !$rootPath ){
for( $i = 0; $i < $pathDeep - $backPathDepth; $i++ ){
$new_url .= ('/' . $depthPath[$i]);
}
}
for ( $i = 0; $i < count($relDepth); $i ++ ){
if( $relDepth[$i] !== '..' && $relDepth[$i] !== '.' ){
$new_url .= ('/' . $relDepth[$i]);
}
}
return $new_url;
}
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的