在网址中包含网址数据

时间:2014-08-03 15:08:26

标签: php url

我需要转到给定页面,如果经过身份验证则将用户登录,然后重定向到另一个页面。我的问题围绕着将url添加到url中的第一页的其他页面。

我的链接看起来像index.php?pg=page1&controller=default&data=123&nextPg=xxx

虽然我将nextPg显示为xxx,但我希望它为pg=page2&controller=whatEver&data=432

我显然无法做到这一点,因为名称是重复的。我可以更改第二个URL的名称或制作第一个和第二个数组,但是,不愿意。理想情况下,当到达第一页时,我的$ _GET可以转换为类似以下内容:

array(
  'pg'=>'page1',
  'controller'=>'default',
  'data'=>123,
  'nextPg'=array('pg'=>'page2','controller'=>'whatEver','data'=>321)
)

这是如何最好地完成的?

1 个答案:

答案 0 :(得分:1)

一种选择是将它们存储在会话中。检查您想要将它们存储在会话中的Flash消息的概念,仅用于下一个请求。

如果您确实需要通过URL传递此信息,则可以执行以下操作。

假设您拥有数组中的数据,您可以首先序列化数组,然后base64_encode,然后将此值传递给URL:

$nextPg_data = array('pg'=>'page2','controller'=>'whatEver','data'=>321);
$nextPg = base64_encode(serialize($nextPg_data));
echo '<a href="index.php?pg=page1&controller=default&data=123&nextPg=' . $nextPg . '">link</a>';

然后,您可以检索,解码和取消序列化下一页中的值,您将获得相同的数组:

$nextPg = unserialize(base64_decode($_GET['nextPg']));

var_dump($nextPg);产生:

array(3) {
  ["pg"]=>
  string(5) "page2"
  ["controller"]=>
  string(8) "whatEver"
  ["data"]=>
  int(321)
}

顺便说一句,如果您决定使用上述方法,请尝试使用一些实际数据,以确保不会超过任何characters limit