代码点火器 - 将URL放入URL参数

时间:2013-06-27 09:44:30

标签: php codeigniter url

在Code Igniter中,我使用的是内置的URL类

我这里有问题。我想将引荐来源网址包含在当前网址中。

示例,localhost / from_referrer / /account/verify/email/b4a98ddd44

/account/verify/email/b4a98ddd44是我想要包含在当前网址中的网址。

我尝试过urlencode()。看起来像这样

/account/login/from/%2Faccount%2Fverify%2Femail%2Fb4a98ddd44

但它不起作用。 CI假设我想去

/account/login/from//account/verify/email/b4a98ddd44

但我想去

/ account / login / from / /account/verify/email/b4a98ddd44(突出显示的只是参数)

你们中的任何人都知道如何制作它?

2 个答案:

答案 0 :(得分:0)

这是一个想法

尝试使用/替换-作为您的推荐人网址

$referrer= str_replace('/', '-', '/account/verify/email/b4a98ddd44');

所以你的网址会变成这样的

account/login/from/-account-verify-email-b4a98ddd44

现在,在您的account controller's登录功能中,请点击

function login(){
$referrer= str_replace('-','/',$this->uri->segment(4));
}

现在您可以通过多种方式执行此操作,例如您可以对网址进行哈希并附加到您的网址中,但如果您在网址中附加/account/verify/email/b4a98ddd44 CI会将其视为个别参数

account => is the uri segment(4);
verify=> is the uri segment(5);
email=> is the uri segment(6);
b4a98ddd44=> is the uri segment(7);

所以你需要创建一个没有/的字符串,所以它会出现在一个uri段

希望它有意义

答案 1 :(得分:0)

如果您的网址始终以相同的网段开头,您可以尝试获取数组中的所有网段,并在开头不需要时删除网段。

$segs = $this->uri->segment_array();
unset ($segs[0]); //unset /account
unset ($segs[1]); //unset /login
unset ($segs[2]); //unset /from

$uri = implode('/', $segs);
echo $uri; // echoes "account/verify/email/b4a98ddd44"

另一个可能的解决方案: 这不是你的问题的一个问题,但可能是(beter)解决。

为什么不将http referer与codeigniter flash数据结合使用? 当用户进入登录页面时,在控制器

中设置闪存数据
$this->session->set_flashdata("referer",$_SERVER['HTTP_REFERER']);

然后在用户登录后,您可以使用它来再次检索值

$uri = $this->session->flashdata("referer");

flash data codeigniters manual