我有一个查询字符串的一部分,我想替换它。我想使用preg_replace
但是有点挂在正则表达式上。
有人可以帮忙吗?我需要更换的是GET vars。
这是字符串:
bikeType=G&nikeNumber=4351
答案 0 :(得分:8)
PHP有一个方便的函数来解析查询字符串:parse_str()。您可能想看一下或提供更多详细信息,因为您的问题并不完全清楚。
答案 1 :(得分:4)
如前所述,您可以使用parse_str
此外,如果您想将它们放回查询字符串中,可以使用http_build_query
示例:
parse_str('bikeType=G&nikeNumber=4351', $params);
$params['bikeType'] = 'F';
$params['nikeNumber'] = '1234';
echo http_build_query($params, '', '&');
输出
bikeType=F&nikeNumber=1234
请注意,如果没有第二个参数(或者至少没有考虑到某些因素),则不应使用parse_str
。当你将它遗漏时,PHP将从当前范围中的查询参数创建变量。这可能会导致安全问题。恶意用户可以使用它来覆盖其他变量,例如
// somewhere in your code you assigned the current user's role
$role = $_SESSION['currentUser']['role'];
// later in the same scope you do
parse_str('bikeType=G&nikeNumber=4351&role=admin');
// somewhere later you check if the user is an admin
if($role === "admin") { /* trouble */ }
另一个注意事项:建议使用http_build_query
的第三个参数,因为&符号的正确编码为&
。如果只将&
放在那里,一些验证者会抱怨。