首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 正則提取圖片地址實戰:從 src 屬性到相對路徑補全

     編輯:PHP 綜合知識

標準 img 標籤結構

<img title="alt文字" src="https://example.com/img.jpg" alt="描述" width="100" height="100" />

正則演進過程

1. 零寬斷言失敗

// PHP 不支援不定長度 lookbehind
(?<=img.+?src=").*?(?=")  // Compilation failed

2. 固定寬度 lookbehind(脆弱)

(?<=img src=").*?(?=")
(?<=img\s+src=").*?(?=")

3. 捕獲組方案(推薦)

$pattern = '/<img(.*?)src="(.*?)(?=")/';
preg_match_all($pattern, $html, $matches);
// $matches[2] 為圖片地址陣列

4. 加上副檔名過濾(不完美)

$pattern = '/<img(.*?)src="(.*?\.(jpg|jpeg|gif|png|bmp))/i';

⚠️ 會漏掃無副檔名圖片(如 CDN 動態圖片)

相對路徑補全策略

function normalize_img_url(string $src, string $baseUrl): string {
    if (preg_match('/^https?:\/\//', $src)) return $src; // 已是絕對
    
    $base = rtrim($baseUrl, '/') . '/';
    if ($src[0] === '/') {
        // 根相對路徑
        $parsed = parse_url($baseUrl);
        return $parsed['scheme'] . '://' . $parsed['host'] . $src;
    }
    // 相對路徑:直接拼接(多層 / 瀏覽器自動正規化)
    return $base . ltrim($src, './');
}

實測驗證

# 多重斜線等價
https://img.example.com/pics/nav/logo.png
https://img.example.com////pics////nav///logo.png  # 同樣可訪問

線上測試工具

  • 通用抓取:https://xyark.serw5.com/img.php
  • Coppermine 系統專用:https://xyark.serw5.com/g.php
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved