You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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属性

额外优化点

  1. 初始化$tag变量,避免无标签时出现未定义错误
  2. 用urlencode处理$tag参数,防止特殊字符破坏URL结构
  3. 添加抓取失败、未找到目标内容的错误处理,提升代码健壮性

内容的提问来源于stack exchange,提问作者Bond1989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:45:52