我正在尝试更改查询字符串中的变量名,因此我的PHP代码可以使用它。
查询从外部系统获取帖子,因此我无法控制他们发布的变量名称中包含空格。这使我无法使用PHP $_GET
函数。
我需要将variable%20name
更改为?new1
我需要将variable2更改为new2
查询中传递了许多变量,但只需要更改这两个变量。其余的可以保持不变甚至消失。
所以?variable%20name=abc&variable2=xyz
最终需要?new1=abc&new2=xyz
此外,它们可能不是这个顺序,可能还有更多变量
那么?变量%20name = abc& blah = 123& blah2 = 456& variable2 = xyz
最终可以?new1=abc&new2=xyz
或?new1=abc&blah=123&blah2=456&new2=xyz
无论哪种方式都没问题!
请告诉我 mod_rewrite 规则,以解决此问题。
提前谢谢!
答案 0 :(得分:1)
使用mod_rewrite
解析查询字符串有点痛苦,必须使用RewriteCond
并在后续%n
中使用RewriteRule
替换,可能更容易在PHP中手动分解原始查询字符串。
可以在$_SERVER['QUERY_STRING']
中找到完整的查询字符串(在PHP中)。
您可以使用preg_split()
或explode()
,先&
,然后=
将其拆分,以获得键/值对。
以custom%20cbid=123&blahblahblah&name=example
为例。
$params = array();
foreach (explode("&", $_SERVER['QUERY_STRING']) as $cKeyValue) {
list ($cKey, $cValue) = explode('=', $cKeyValue, 2);
$params[urldecode($cKey)] = urldecode($cValue);
}
// Would result in:
$params = array('custom cbid' => 123,
'blahblahblah' => NULL,
'name' => example);