更改使用parse_url的get变量在php中不起作用

时间:2018-09-19 00:08:45

标签: php

我已经看过SO上与之相关的每篇文章,但我对此一无所知。此代码直接从另一个SO帖子获取,并被标记为正确的工作答案:

$query = $_GET;
// replace parameter(s)
$query['d'] = 'new_value';
// rebuild url
$query_result = http_build_query($query);
// new link
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?<?php echo $query_result; ?>">Link</a>

再次,直接取自另一篇文章。当我尝试此代码时,我将$_GET更改为想要更改的实际URL。当代码到达$query['d']部分时,它告诉我得到了illegal string offset,并且错误是指定的索引。因此,我解析了URL,然后执行parse_str($query, $output),这反过来又允许我执行$output['d'],然后可以为该变量设置一个新值。如果我回声,那很好。

但是随后我到达http_build_query行,它告诉我它正在期待一个数组或对象,因此无法构建新的URL。这是我的代码:

$link = parse_url('https://www.google.com/search?source=hp&ei=85GhW6CNHoSqsgXnzoD4Ag&q=coding+tutorial&btnK=Google+Search&oq=coding+tutorial', PHP_URL_QUERY);

 parse_str($link, $output);
 $output['oq'] = 'new value';

 $query_result = http_build_query($link);
echo $query_result;

这段代码表明http_build_query函数需要一个数组或对象...我想我没有以某种方式给出它?我需要做些什么才能使其正常工作?

1 个答案:

答案 0 :(得分:0)

如果要在修改查询参数后重建完整的URL,可以执行以下操作:

$url = 'https://www.google.com/search?source=hp&ei=85GhW6CNHoSqsgXnzoD4Ag&q=coding+tutorial&btnK=Google+Search&oq=coding+tutorial';
$link = parse_url($url, PHP_URL_QUERY);
parse_str($link, $output);
$output['oq'] = 'new value';
echo substr($url, 0, strpos($url, '?') + 1) . http_build_query($output);

输出:

https://www.google.com/search?source=hp&ei=85GhW6CNHoSqsgXnzoD4Ag&q=coding+tutorial&btnK=Google+Search&oq=new+value