透過抓取目標網頁原始碼,利用正則表達式解析所有 `` 連結,並自動補全相對路徑。
<?php
$url = isset($_GET['url']) ? $_GET['url'] : 'https://www.csdn.net/expert/';
$site = substr($url, 0, strpos($url, '/', 8)); // 站點根網址
$base = substr($url, 0, strrpos($url, '/') + 1); // 當前目錄
$fp = fopen($url, 'r');
$contents = '';
while (!feof($fp)) {
$contents .= fread($fp, 1024);
}
fclose($fp);
$pattern = '|href=["\']?([^"\' >]+)["\']?|U';
preg_match_all($pattern, $contents, $matches, PREG_SET_ORDER);
foreach ($matches as $i => $m) {
$link = $m[1];
if (!preg_match('|://|', $link)) { // 相對路徑
if (substr($link, 0, 1) == '/') {
$link = $site . $link; // 站點根目錄相對
} else {
$link = $base . $link; // 當前目錄相對
}
}
echo "link" . ($i+1) . ": $link
";
}
?>
|href=["\']?([^"\' >]+)["\']?|U` 非貪婪匹配 href 屬性值。