【问题标题】:Replace values in a URI query string替换 URI 查询字符串中的值
【发布时间】:2012-06-29 16:32:16
【问题描述】:

我有一个查询字符串的一部分,我想在其中进行替换。我想使用preg_replace,但我有点挂断了正则表达式。

有人可以帮忙吗?我需要替换的是 GET 变量。

这是字符串:

bikeType=G&nikeNumber=4351

【问题讨论】:

  • 它们将被动态替换。
  • 请问您能澄清您的问题吗?您希望正则表达式准确匹配什么?
  • 不能直接访问get数组来读取变量吗?

标签: php


【解决方案1】:

PHP 有一个方便的函数来解析查询字符串:parse_str()。由于您的问题并不完全清楚,您可能需要查看或提供更多详细信息。

【讨论】:

  • 并将数组从parse_str重新格式化,修改后变成字符串,您可以使用http_build_query
【解决方案2】:

您可以使用前面提到的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 的第三个参数,因为与符号的正确编码是&。如果您只在其中输入 &,一些验证器会抱怨。

【讨论】:

    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2010-12-07
    • 1970-01-01
    • 2014-11-22
    • 2023-02-23
    • 1970-01-01
    相关资源
    最近更新 更多