【问题标题】:APACHE mod_rewrite change variable name in query stringAPACHE mod_rewrite 更改查询字符串中的变量名
【发布时间】:2011-07-23 23:57:21
【问题描述】:

我正在尝试更改查询字符串中的变量名,以便我的 PHP 代码可以使用它。

查询从外部系统获取帖子,因此我无法控制他们发布的变量名称中包含空格。这让我无法使用 PHP $_GET 函数。

我需要将variable%20name 更改为?new1

我需要将 variable2 更改为 new2

查询中传递了很多变量,但只有这两个需要更改。其余的可以保持不变甚至消失。

所以?variable%20name=abc&variable2=xyz

需要以?new1=abc&new2=xyz结尾

另外,它们可能不是这个顺序,可能有更多变量

所以 ?variable%20name=abc&blah=123&blah2=456&variable2=xyz

最终可能是?new1=abc&new2=xyz

?new1=abc&blah=123&blah2=456&new2=xyz

无论哪种方式都可以!

请给我 mod_rewrite 规则来解决这个问题。

提前谢谢你!

【问题讨论】:

  • 只能解析$_SERVER['QUERY_STRING']
  • 请告诉我更多和/或给我一个重写规则的例子。或者那是一个PHP函数?我迷路了,需要帮助才能完成这项工作。谢谢!

标签: php apache mod-rewrite get


【解决方案1】:

使用mod_rewrite 解析查询字符串有点麻烦,必须使用RewriteCond 并在随后的RewriteRule 中使用%n 替换,可能更容易手动分解原始查询字符串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);

【讨论】:

  • 谢谢。您能否给我确切的 PHP 代码来获取 ?custom%20cbid=123&blahblahblah&name=example 并最终得到 $cbid = 123; $mname = "示例" ;
  • @Dustin:添加了示例代码,无需将参数移动到单独的变量中,如果您愿意,可以将它们从结果数组中取出。
  • 谢谢!看来我越来越近了,但我仍然不知道如何处理其中有空格的变量。我怎样才能使 $cbid = 123? (即我如何将 $cbid 的值设置为“自定义 cbid”的值?这就是我真正需要知道的。
  • PS 我真的不知道我在做什么,所以当你说我可以从结果数组中取出值时,我去谷歌搜索“values array php”并尝试想办法。但我还没有运气......
  • 太好了,我可以使用它了:$cbid = $params['custom%20cbid'];
猜你喜欢
  • 2014-07-27
  • 2013-02-06
  • 1970-01-01
  • 2014-06-20
  • 2014-01-28
  • 2012-03-20
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多