我是从GET参数中获取查询字符串,如下所示:
$queryStr= http_build_query($_GET);
我试图同时应用str_replace和amp;此字符串上的substr用于将get参数的某个原始值替换为所需的值。 两者都没有返回原始字符串。
例如。 $sth = substr($queryStr, 0, 9);
或
$sth = str_replace ("user", "somethingelse",$queryStr);
这有什么问题?
编辑: 好的,对不起。字符串函数由于我对if条件中的变量的粗心错误而无法正常工作。他们应该工作正常。
顺便说一下,
我通过$_GET["key"] = "sth";
其他获取参数数组我甚至没有触及已自动从“arrayName%5B%5D”更改为“arrayName%5B0%5D” http_build_query()
生成的新查询$original_url = http_build_query($_GET);
$_GET["key"] = "sth";
$new_url = http_build_query($_GET);
原始查询来自http_build_query():
&安培; arrayName中%5B%5D =
来自http_build_query()的新查询:
&安培; arrayName中%5B的 0 %5D =
这是什么原因?
答案 0 :(得分:1)
请检查,str_replace正在运行:
链接: http://localhost/test.php?val1=1&val2=2
$ queryStr = http_build_query($ _ GET);
echo "Before " .$queryStr;
$queryStr = str_replace("val1","val2",$queryStr);
echo "<br> After " .$queryStr;
**Output**
Before val1=1&val2=2
After val2=1&val2=2
答案 1 :(得分:1)
在提供的链接https://3v4l.org/8i1sH中,您的代码可以正常运行:
$_GET = ['user' => 'Bob', 'location' => 'city'];
$queryStr = http_build_query($_GET);
echo $queryStr, PHP_EOL;
$sth = str_replace ("user", "somethingelse",$queryStr);
echo $sth, PHP_EOL;
$sth = substr($queryStr, 0, 9);
echo $sth, PHP_EOL;
但更简单的解决方案是在$_GET
数组中替换您需要的内容,然后构建查询字符串,例如https://3v4l.org/i6eKv:
// remove items,
unset($_GET['key']);
// add/replace items
$_GET['another_key'] = 'value';
// and only then
$queryStr = http_build_query($_GET);
答案 2 :(得分:1)
我在构建查询字符串之前替换参数。
<?php
$params =
[
'song' => 'Bridge over troubled water',
'artist' => 'Simon & Garfunkel',
'tags' => 'gorgeous;harmony;bridge'
];
$overrides =
[
'tags' => 'dirge;tears',
'artist' => 'Elvis Presley'
];
$params = array_replace($params, $overrides);
$query_string = http_build_query($params);
var_dump($query_string);
输出:
string(71) "song=Bridge+over+troubled+water&artist=Elvis+Presley&tags=dirge%3Btears"