簡單需求:從 https://example.com/path/file.html?id=1 取得 html。注意查詢字串、錨點、多重點號等邊界情況。
$url = "https://www.jb51.net/index.html?id=1"; $path = parse_url($url, PHP_URL_PATH); // /index.html $ext = pathinfo($path, PATHINFO_EXTENSION); // html echo $ext;
function getUrlPostfix($url) {
$urlArr = explode('.', $url);
$postfix = $urlArr[count($urlArr) - 1]; // 最後一段
return substr($postfix, 0, 3); // 僅取前 3 字元 (不建議)
}
function getExtensionFromUrl($url) {
$parsed = parse_url($url);
$path = $parsed['path'] ?? '';
$filename = basename($path);
$ext = pathinfo($filename, PATHINFO_EXTENSION);
return strtolower($ext);
}
// 測試
var_dump(getExtensionFromUrl("https://example.com/file.tar.gz")); // gz
var_dump(getExtensionFromUrl("https://example.com/.htaccess")); // "" (隱藏檔無副檔名)
var_dump(getExtensionFromUrl("https://example.com/file?name=test")); // "" (無副檔名)
explode('.', $url) 會被查詢字串 ?id=1.2 干擾substr($postfix, 0, 3) 假設副檔名 3 字元,實際可能 1-10+ 字元.gitignore 無副檔名.tar.gz 只取最後一段一律使用 parse_url() + pathinfo() 組合,標準、健壯、無邊界錯誤。