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

PHP 從 URL 取得副檔名的簡單方法

     編輯:PHP 相關知識

前言

從 URL 字串解析檔案副檔名是常見需求(如判斷圖片類型、驗證上傳格式)。本文提供一個簡潔函數,並說明需注意的查詢字串、錨點等干擾因素。

基本實作

<?php
/**
 * 從 URL 取得副檔名(小寫)
 *
 * @param string $url
 * @return string|null 副檔名,無則回傳 null
 */
function getUrlExtension(string $url): ?string {
    // 1. 移除查詢字串與錨點
    $path = parse_url($url, PHP_URL_PATH);

    // 2. 取得路徑最後一段(檔名)
    $filename = basename($path);

    // 3. 解析副檔名
    $ext = pathinfo($filename, PATHINFO_EXTENSION);

    return $ext ?: null;
}

// 測試
$urls = [
    'https://example.com/image.jpg',
    'https://example.com/path/file.tar.gz',
    'https://example.com/page?query=1',
    'https://example.com/script.php#section',
    'https://example.com/noext',
];

foreach ($urls as $url) {
    echo "$url => " . (getUrlExtension($url) ?? '(無)') . "\n";
}
/*
輸出:
https://example.com/image.jpg => jpg
https://example.com/path/file.tar.gz => gz
https://example.com/page?query=1 => (無)
https://example.com/script.php#section => php
https://example.com/noext => (無)
*/
?>

關鍵函數說明

常見誤區與修正

  • ❌ explode('.', $url) 會被查詢字串參數干擾(如 ?v=1.2)。
  • ❌ 直接取最後 3 字元(原文 substr($postfix, 0, 3))假設副檔名固定 3 字,實際長度不定(如 .html、.jpeg、.tar.gz)。
  • ✅ 使用內建 pathinfo() 最可靠,符合 POSIX 檔名規範。

進階:取得完整副檔名(含多重)

<?php
function getFullExtension(string $filename): string {
    // 取得第一個點之後的所有內容
    $pos = strpos($filename, '.');
    return $pos !== false ? substr($filename, $pos + 1) : '';
}

echo getFullExtension('archive.tar.gz'); // tar.gz
?>

總結

善用 parse_url()、basename()、pathinfo() 三大內建函數,即可健壯地從 URL 解析副檔名。希望本文對您的 PHP 程式設計有所幫助。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
函數用途
parse_url($url, PHP_URL_PATH)只取路徑部分,自動去除 query、fragment
basename($path)取得路徑最後一段(檔名)
pathinfo($file, PATHINFO_EXTENSION)標準函數取得副檔名,正確處理多點檔名(取最後一點後)