CodeIgniter PHP Framework - 需要获取查询字符串

2022-08-30 12:46:22

我正在使用CodeIgniter创建一个电子商务网站。

应如何获取查询字符串?

我正在使用更安全的支付网关。网关响应将如下所示:

http://www.test.com/registration/success/?DATA=<IDP+MSGTYPE%3D"PayConfirm"+KEYID%3D"1-0"+ID%3D"KI2WSWAn5UG3vAQv80AdAbpplvnb"+TOKEN%3D"(unused)"+VTVERIFY%3D"(obsolete)"+IP%3D" 123.25.37.43"+IPCOUNTRY%3D"IN"+AMOUNT%3D"832200"+CURRENCY%3D"CHF"+PROVIDERID%3D"90"+PROVIDERNAME%3D"Saferpay+Test+Card"+ACCOUNTID%3D"99867-94913159"+ECI%3D"2"+CCCOUNTRY%3D"XX"%2F>&SIGNATURE=bc8e253e2a8c9ee0271fc45daca05eecc43139be6e7d486f0d6f68a356865457a3afad86102a4d49cf2f6a33a8fc6513812e9bff23371432feace0580f55046c

为了处理响应,我需要获取查询字符串数据。


对不起,我没有清楚地解释问题。我在付款后收到付款网站的回复时收到“找不到页面”错误。

我已尝试启用 with 和 in 。在谷歌搜索时,我发现如果我使用htaccess重写,这将不起作用。uri_protocol = 'PATH_INFO'enable_query_strings = 'TRUE'config.php

我已经尝试过更改配置条目,但它不起作用。


答案 1

你可以这样得到它:

$this->input->get('some_variable', TRUE);

有关详细信息,请参阅此内容。


答案 2

我已经使用CodeIgniter一年多了。在大多数情况下,我真的很喜欢它(我为论坛做出贡献,并在我所能的每一个实例中使用它),但我讨厌手册中这句话的傲慢:

销毁全局 GET 数组。由于CodeIgniter不使用GET字符串,因此没有理由允许它。

在CodeIgniter应用程序中您永远不需要GET的假设是asinine!在短短几天内,我不得不处理来自PayPal和ClickBank的回发页面(我相信还有其他一百万个)。你猜怎么着,他们使用GET!!!

有一些方法可以阻止这种GET压扁,但它们往往会搞砸其他事情。您不想听到的是,您必须重新编码所有视图,因为您启用了查询字符串,现在您的链接已断开!仔细阅读该选项的手册!

我喜欢的一个(但不起作用,因为在config中设置REQUEST_URI.php破坏了我的网站)是扩展Input类:

class MY_Input extends CI_Input
{
        function _sanitize_globals()
        {
            $this->allow_get_array = TRUE;
            parent::_sanitize_globals();
        }
}

但最好的无稽之谈方法是在需要 GET 变量的 URL 上使用 print_r($_SERVER) 进行测试。查看哪个 URI 协议选项显示 GET 变量并使用它。

就我而言,我可以看到我需要什么REQUEST_URI

// defeat stupid CI GET squashing!
parse_str($_SERVER['REQUEST_URI'], $_GET);

这会将您的查询字符串放回该页面实例的 $_GET 超级全局(您不必使用 $_GET,它可以是任何变量。

编辑

自从发布此内容以来,我发现在使用REQUEST_URI时,除非您删除?之前的所有内容,否则您将丢失第一个查询字符串数组键。例如,像 /controller/method?one=1&two=2 这样的 URL 将用 array('method?one'=>1,'two'=>2) 填充此示例中的 $_GET 数组。为了解决这个问题,我使用了下面的代码:

parse_str(substr(strrchr($_SERVER['REQUEST_URI'], "?"), 1), $_GET);

我想我应该提供一个例子,所以这里是:

class Pgate extends Controller {
   function postback() {
      parse_str(substr(strrchr($_SERVER['REQUEST_URI'], "?"), 1), $_GET);
      $receipt = $this->input->xss_clean($_GET['receipt']);
   }
}

推荐