我想在不重复?
或&
的情况下,将GET参数添加到可能包含GET参数和可能不包含GET参数的URL。
示例:
如果我想添加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参数的可靠方法是什么?
发布于 2011-04-28 04:05:16
基本方法
$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'];
你至少应该把它放在一个函数中,如果不是一个类。
发布于 2013-06-07 22:51:06
以下是公认答案的简短版本:
$url .= (parse_url($url, PHP_URL_QUERY) ? '&' : '?') . 'category=action';
编辑:正如在接受的答案中所讨论的,这是有缺陷的,因为它没有检查category
是否已经存在。一个更好的解决方案是使用像in_array()
这样的函数来处理$_GET
-一个数组。
发布于 2011-04-28 04:06:30
$data = array('foo'=>'bar',
'baz'=>'boom',
'cow'=>'milk',
'php'=>'hypertext processor');
$queryString = http_build_query($data);
//$queryString = foo=bar&baz=boom&cow=milk&php=hypertext+processor
echo 'http://domain.com?'.$queryString;
//output: http://domain.com?foo=bar&baz=boom&cow=milk&php=hypertext+processor
https://stackoverflow.com/questions/5809774
复制相似问题