PHP中如何将HTML的href和src绝对URL转为相对路径?
解决方案:将绝对URL转为相对路径
首先修正原代码的潜在问题(比如未初始化变量、未处理抓取失败情况),并添加preg_replace实现URL转换,完整代码如下:
<?php $tag = ''; // 初始化变量,避免未定义错误 $post_tags = get_the_tags(); if ($post_tags) { $tag = $post_tags[0]->name; } // 抓取外部内容,用urlencode处理参数避免特殊字符问题 $html = file_get_contents('https://www.trade-ideas.com/ticky/ticky.html?symbol=' . urlencode($tag)); // 处理抓取失败的情况 if ($html === false) { echo '无法获取目标内容'; exit; } $start = strpos($html, '<div class="span3 height-325"'); $end = strpos($html, '<!-- /span -->', $start); // 检查是否找到目标内容片段 if ($start === false || $end === false) { echo '未找到指定内容区域'; exit; } $data = substr($html, $start, $end - $start); // 核心:将href和src中的绝对URL转为相对路径 $data = preg_replace('/(href|src)="https?:\/\/[^\/]+(\/.*?)"/i', '$1="$2"', $data); echo $data; ?>
正则表达式说明
这段正则一次处理href和src两种属性:
(href|src):捕获属性名(href或src),后续用$1引用"https?:\/\/[^\/]+":匹配http/https开头的域名部分([^\/]+匹配到第一个斜杠前的所有字符)(\/.*?):捕获域名后的路径部分(从斜杠开始到下一个引号结束,.*?是非贪婪匹配,避免过度匹配)/i:不区分大小写,兼容大写的HREF/SRC属性
额外优化点
- 初始化
$tag变量,避免无标签时出现未定义错误 - 用
urlencode处理$tag参数,防止特殊字符破坏URL结构 - 添加抓取失败、未找到目标内容的错误处理,提升代码健壮性
内容的提问来源于stack exchange,提问作者Bond1989
相关产品推荐
相关产品推荐

