2

我有一个简单的 Joomla 控制器,但我无法重定向任何东西。

根据文档:

class MyController extends MyBaseController {

 function import() {
    $link = JRoute::_('index.php?option=com_foo&ctrl=bar');
    $this->setRedirect($link);
  }

}
//The url contains & html escaped character instead of "&"

这应该可以,但我得到一个格式错误的 URL。我在这里缺少什么吗?为什么 Joomla 将所有“&”字符转换为&'s?我应该如何使用 setRedirect?

谢谢

4

5 回答 5

11

好吧,我修好了。因此,如果有人需要它:

代替

$link = JRoute::_('index.php?option=com_foo&ctrl=bar');
$this->setRedirect($link);

利用

$link = JRoute::_('index.php?option=com_foo&ctrl=bar',false);
$this->setRedirect($link);

让它工作。

于 2012-10-30T17:13:55.247 回答
1

Glad you found your answer, and by the way, the boolean parameter in JRoute::_() is by default true, and useful for xml compliance. What it does is that inside the static method, it uses the htmlspecialchars php function like this: $url = htmlspecialchars($url) to replace the & for xml.

于 2012-10-31T01:20:35.717 回答
1

尝试这个。

$mainframe = &JFactory::getApplication();
$mainframe->redirect(JURI::root()."index.php?option=com_foo&ctrl=bar","your custom message[optional]","message type[optional- warning,error,information etc]");
于 2012-10-31T04:21:00.703 回答
0

检查 Joomla 源代码后,您可以快速了解发生这种情况的原因:

if (headers_sent())
    {
        echo "<script>document.location.href='" . htmlspecialchars($url) . "';</script>\n";
    }
    else
    {
    ... ... ...

问题是您的页面可能已经输出了一些数据(通过回显或其他方式)。在这种情况下,Joomla 被编程为使用简单的 javascript 重定向。但是,在此 javascript 重定向中,它已将 htmlspecialchars() 应用于 URL。

一个简单的解决方案是不使用 Joomlas 函数并以更有意义的方式直接编写 javascript:

echo "<script>document.location.href='" . $url . "';</script>\n";

这对我有用:)

于 2013-07-31T06:38:47.000 回答
-3

/libraries/joomla/application/application.php

查找第 400 行

    // If the headers have been sent, then we cannot send an additional location header
    // so we will output a javascript redirect statement.
    if (headers_sent())
    {
        echo "<script>document.location.href='" . htmlspecialchars($url) . "';</script>\n";
    }

替换为

    // If the headers have been sent, then we cannot send an additional location header
    // so we will output a javascript redirect statement.
    if (headers_sent())
    {
        echo "<script>document.location.href='" . $url . "';</script>\n";
    }

这行得通!

于 2016-06-19T14:11:27.047 回答