首页 >后端开发 >php教程 >如何从 PHP 的 URL 中检索多个同名参数?

如何从 PHP 的 URL 中检索多个同名参数?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-07 00:57:11994浏览

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