通过添加 GET 参数操作 url 字符串

2022-08-30 07:24:07

我想将 GET 参数添加到 URL 中,这些 URL 可能包含也可能不包含 GET 参数,而无需重复 或 .?&

例:

如果我想添加category=action

$url="http://www.acme.com";
 // will add ?category=action at the end

$url="http://www.acme.com/movies?sort=popular";
 // will add &category=action at the end

如果你注意到我试图不重复问号,如果它被发现。

URL 只是一个字符串。

什么是附加特定 GET 参数的可靠方法?


答案 1

基本方法

$query = parse_url($url, PHP_URL_QUERY);

// Returns a string if the URL has parameters or NULL if not
if ($query) {
    $url .= '&category=1';
} else {
    $url .= '?category=1';
}

更高级

$url = 'http://example.com/search?keyword=test&category=1&tags[]=fun&tags[]=great';

$url_parts = parse_url($url);
// If URL doesn't have a query string.
if (isset($url_parts['query'])) { // Avoid 'Undefined index: query'
    parse_str($url_parts['query'], $params);
} else {
    $params = array();
}

$params['category'] = 2;     // Overwrite if exists
$params['tags'][] = 'cool';  // Allows multiple values

// Note that this will url_encode all values
$url_parts['query'] = http_build_query($params);

// If you have pecl_http
echo http_build_url($url_parts);

// If not
echo $url_parts['scheme'] . '://' . $url_parts['host'] . $url_parts['path'] . '?' . $url_parts['query'];

如果不是类,您至少应该将其放在函数中。


答案 2

以下是已接受答案的简短版本:

$url .= (parse_url($url, PHP_URL_QUERY) ? '&' : '?') . 'category=action';

编辑:正如在接受的答案中所讨论的那样,这是有缺陷的,因为它没有检查是否已经存在。更好的解决方案是将 它视为数组 - 并使用类似 .category$_GETin_array()


推荐