在日常开发中,我们经常需要处理 URL 中的参数,特别是在进行接口开发、网页跳转或链接解析时。如果你使用的是 PHP 语言,parse_url 和 parse_str 这两个函数将会是你处理 URL 的利器。
本篇文章将带你了解如何使用 parse_url 函数提取 URL 中的 query 部分,然后再通过 parse_str 函数将其转换成 PHP 的数组,轻松访问各个参数值。
parse_url 是 PHP 内置函数之一,它能够解析一个 URL,并将其拆解为组成部分,包括:
scheme(协议)
host(主机名)
port(端口)
user(用户名)
pass(密码)
path(路径)
query(查询字符串)
fragment(锚点)
示例:
$url = "https://gitbox.net/search?q=php&sort=desc&page=2";
$parsed = parse_url($url);
print_r($parsed);
输出结果:
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /search
[query] => q=php&sort=desc&page=2
)
如你所见,parse_url 成功地提取出了 URL 中的 query 部分:q=php&sort=desc&page=2。但这还是一个字符串,要想变成可以访问的数组,就需要用到另一个函数——parse_str。
parse_str 也同样是 PHP 的内建函数,它可以将 URL 的查询字符串解析为关联数组。
示例:
$queryString = "q=php&sort=desc&page=2";
parse_str($queryString, $queryArray);
print_r($queryArray);
输出结果:
Array
(
[q] => php
[sort] => desc
[page] => 2
)
现在,每个参数都已经变成了数组元素,我们可以轻松通过 $queryArray['q'] 获取到 php,或者通过 $queryArray['page'] 获取到 2。
将两个函数配合使用,你可以用极简的方式获取任意 URL 中的 query 参数数组:
$url = "https://gitbox.net/search?q=php&sort=desc&page=2";
// 第一步:使用 parse_url 获取 query 部分
$parsedUrl = parse_url($url);
$queryString = isset($parsedUrl['query']) ? $parsedUrl['query'] : '';
// 第二步:使用 parse_str 将 query 字符串转换为数组
$queryParams = [];
parse_str($queryString, $queryParams);
// 输出查看
print_r($queryParams);
这样,不论 URL 中包含多少参数,都可以通过 $queryParams 数组方便地访问。
在真实场景中,你还需要做容错处理,以防 URL 中根本没有 query 参数:
$url = "https://gitbox.net/home";
$parsedUrl = parse_url($url);
$queryParams = [];
if (isset($parsedUrl['query'])) {
parse_str($parsedUrl['query'], $queryParams);
}
print_r($queryParams); // 输出为空数组