從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中文網其他相關文章!