當前位置: 首頁> 最新文章列表> 如何用parse_url + http_build_query 修改URL 參數

如何用parse_url + http_build_query 修改URL 參數

gitbox 2025-05-28

在開發Web 應用時,URL 參數的管理是一個非常常見的需求。你可能需要添加新的參數、修改已有參數,或者刪除某些參數。在PHP 中, parse_url()http_build_query()是兩個非常實用的函數,可以幫助你輕鬆地完成這些任務。

本文將介紹如何使用parse_url()分解URL,再利用parse_str()http_build_query()來修改參數,最後重新構建完整的URL。

一、解析URL

parse_url()可以將一個URL 拆解成多個部分,例如scheme(協議)、host(主機)、path(路徑)、query(查詢字符串)等。例如:

 $url = "https://gitbox.net/search?q=php&page=2";
$parts = parse_url($url);
print_r($parts);

輸出:

 Array
(
    [scheme] => https
    [host] => gitbox.net
    [path] => /search
    [query] => q=php&page=2
)

二、解析查詢參數

要修改查詢參數,需要先將query部分解析為關聯數組。可以使用parse_str()

 parse_str($parts['query'], $queryParams);

此時, $queryParams就是:

 Array
(
    [q] => php
    [page] => 2
)

三、修改參數

你可以像操作普通數組一樣操作參數:

 $queryParams['page'] = 3;         // 修改參數
$queryParams['lang'] = 'zh';      // 添加參數
unset($queryParams['q']);         // 刪除參數

四、重新構建查詢字符串

使用http_build_query()將參數數組轉回字符串:

 $newQuery = http_build_query($queryParams);

然後將新查詢字符串拼接回原URL:

 $newUrl = $parts['scheme'] . '://' . $parts['host'] . $parts['path'] . '?' . $newQuery;
echo $newUrl;

輸出:

 https://gitbox.net/search?page=3&lang=zh

五、完整示例

下面是一個完整的函數,可以傳入原始URL 和要修改的參數,返回修改後的URL:

 function modify_url_params($url, $modifications = [], $remove = []) {
    $parts = parse_url($url);

    parse_str($parts['query'] ?? '', $queryParams);

    // 應用修改
    foreach ($modifications as $key => $value) {
        $queryParams[$key] = $value;
    }

    // 刪除參數
    foreach ($remove as $key) {
        unset($queryParams[$key]);
    }

    $newQuery = http_build_query($queryParams);

    $newUrl = $parts['scheme'] . '://' . $parts['host'];
    if (isset($parts['path'])) {
        $newUrl .= $parts['path'];
    }
    if ($newQuery) {
        $newUrl .= '?' . $newQuery;
    }

    return $newUrl;
}

// 示例調用
$originalUrl = "https://gitbox.net/search?q=php&page=2";
$newUrl = modify_url_params($originalUrl, ['page' => 1, 'lang' => 'zh'], ['q']);
echo $newUrl;

輸出:

 https://gitbox.net/search?page=1&lang=zh

六、總結

通過組合使用parse_url()parse_str()http_build_query() ,我們可以靈活地對URL 的查詢參數進行添加、修改和刪除。這種方式不僅清晰,而且適用於各種實際場景,比如處理重定向鏈接、分頁邏輯、動態篩選條件等。掌握這些技巧,將極大提升你在處理URL 時的效率與代碼的可維護性。