从 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中文网其他相关文章!