JFactory::getApplication()->redirect() 将 & 转换为 &

JFactory::getApplication()->redirect() convert & to &

我在 Joomla 3.6.2 中使用 JFactory::getApplication()->redirect() 和路由 index.php?option=com_users&view=login 以及 return 参数时遇到问题。

代码如下所示。

$uri = urlencode(base64_encode(JURI::getInstance()->toString()));
JFactory::getApplication()->redirect(
    JRoute::_('index.php?option=com_users&view=login&return='. $uri),
    JText::_("YOU_MUST_BE_LOGGED_IN_TO_ACCESS_THIS_CONTENT", 'com_portail')
);

其中 $uri 会是这样的:

aHR0cDovL2xvY2FsaG9zdC9wb3J0YWlsL2luZGV4LnBocD9vcHRpb249Y29tX3BvcnRhaWw=

用这个方法我被重定向到类似的东西:

http://localhost/portail/index.php/component/users/?view=login& amp;return=aHR0cDovL2xvY2FsaG9zdC9wb3J0YWlsL2luZGV4LnBocD9vcHRpb249Y29tX3BvcnRhaWw=

特别

注意 & amp;。添加了 2 个空格,因此它不会在堆栈中转换。
这导致我的页面无法加载。

有什么想法吗?

谢谢

改变这个

$uri = urlencode(base64_encode(JURI::getInstance()->toString()));

$uri = base64_encode(JURI::getInstance()->toString());

不要使用 urlencode

如果您使用 JRoute,请将第二个参数设置为 false,它应该可以工作。

所以你的代码应该看起来像这样

JFactory::getApplication()->redirect(
        JRoute::_('index.php?option=com_users&view=login&return='. $uri, false), 
        JText::_("YOU_MUST_BE_LOGGED_IN_TO_ACCESS_THIS_CONTENT", 'com_portail')
        );

应在 JRoute-Docs 中找到说明 :)

问候