替换URI查询字符串中的值

时间:2010-09-23 10:36:37

标签: php

我有一个查询字符串的一部分,我想替换它。我想使用preg_replace但是有点挂在正则表达式上。

有人可以帮忙吗?我需要更换的是GET vars。

这是字符串:

bikeType=G&nikeNumber=4351

2 个答案:

答案 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的第三个参数,因为&符号的正确编码为&。如果只将&放在那里,一些验证者会抱怨。