首頁 >後端開發 >php教程 >如何從 PHP 的 URL 中檢索多個同名參數?

如何從 PHP 的 URL 中檢索多個同名參數?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-07 00:57:11992瀏覽

How to Retrieve Multiple Parameters with the Same Name from URLs in PHP?

從PHP 中的URL 檢索多個同名參數

PHP 的$_GET 超全局變量方便地提供對URL 參數的訪問,但它有一個限制:對於具有相同名稱的參數,它只傳回最後一個值。這可能會阻礙需要處理 URL 中多次出現的特定參數的應用程式。

考慮OpenURL 解析器的範例,它可能會遇到具有多個「rft_id」參數實例的URL:

ctx_ver=Z39.88-2004
&rft_id=info:oclcnum/1903126
&rft_id=http://www.biodiversitylibrary.org/bibliography/4323
&rft_val_fmt=info:ofi/fmt:kev:mtx:book
&rft.genre=book
&rft.btitle=At last: a Christmas in the West Indies. 
&rft.place=London,
&rft.pub=Macmillan and co.,
&rft.aufirst=Charles
&rft.aulast=Kingsley
&rft.au=Kingsley, Charles,
&rft.pages=1-352
&rft.tpages=352
&rft.date=1871

使用$_GET 檢索「rft_id」的兩個值會有問題,因為它只會回傳第二個值(“http://www.biodiversitylibrary.org/bibliography/4323”),覆蓋第一個。

為了應對這項挑戰,我們可以採用更複雜的方法:

$query = explode('&', $_SERVER['QUERY_STRING']);
$params = array();

foreach ($query as $param) {
    // Handling cases where $param lacks an '='
    if (strpos($param, '=') === false) {
        $param .= '=';
    }

    list($name, $value) = explode('=', $param, 2);
    $params[urldecode($name)][] = urldecode($value);
}

此程式碼將查詢字串解析為單獨的參數,每個鍵值對儲存在$params數組中。具有相同名稱的參數值會作為陣列儲存在 $params 陣列中。

對於範例URL,結果將是:

array(
    'ctx_ver' => array('Z39.88-2004'),
    'rft_id' => array('info:oclcnum/1903126', 'http://www.biodiversitylibrary.org/bibliography/4323'),
    // ... other parameters ...
)

使用此方法,您可以方便地存取「rft_id」的兩個值或可能在URL 中多次出現的任何其他參數。

以上是如何從 PHP 的 URL 中檢索多個同名參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn