当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《CodeIgniterPHP框架-需要获取查询字符串》经验,为你挑选了5个好方法。

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

我该如何获取查询字符串?

我正在使用Saferpay支付网关.网关响应将如下所示:

http://www.test.com/registration/success/?DATA=&SIGNATURE=bc8e253e2a8c9ee0271fc45daca05eecc43139be6e7d486f0d6f68a356865457a3afad86102a4d49cf2f6a33a8fc6513812e9bff23371432feace0580f55046c

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


对不起,我没有清楚地解释这个问题.我在收到付款后从付款网站获得回复时收到"找不到页面"错误.

我曾尝试与启用uri_protocol = 'PATH_INFO',并enable_query_strings = 'TRUE'config.php.谷歌搜索我发现如果我使用htaccess重写这将无法正常工作.

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



1> Sarfraz..:

你可以这样得到它:

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

有关详细信息,请参阅此



2> Bretticus..:

我已经使用CodeIgniter超过一年了.在大多数情况下,我真的很喜欢它(我在论坛上做出贡献并在我能做的每一个实例中使用它)但我讨厌手册中该声明的弊端:

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

在CodeIgniter应用程序中永远不需要GET的假设是asinine!在短短几天内,我不得不处理来自PayPal和ClickBank的帖子后页(我确信还有一百万人.)猜猜看,他们使用GET!

有一些方法可以阻止这种GET挤压,但它们往往会阻碍其他事情的发生.您不想听到的是,您必须重新编码所有视图,因为您启用了查询字符串,现在您的链接已损坏!请仔细阅读该手册!

我喜欢的一个(但因为在config.php中设置REQUEST_URI而无法正常工作会破坏我的网站)正在扩展Input类:

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

但最好的严肃方式是在需要GET变量的URL处使用print_r($ _ SERVER)进行测试.查看哪个URI Protocol选项显示您的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']);
   }
}



3> Marc Trudel..:

如果您想要未解析的查询字符串:

$this->input->server('QUERY_STRING');



4> Phil Sturgeo..:

打开application/config/config.php并设置以下值:

$config['uri_protocol'] = "PATH_INFO";

$config['enable_query_strings'] = TRUE; 

现在查询字符串应该正常工作.



5> 小智..:
// 98% functional
parse_str($_SERVER['REQUEST_URI'], $_GET);

这实际上是处理CodeIgniter中缺少对$ _GET查询字符串的支持的最佳方法.我实际上是自己想出了这个,但很快就意识到了Bretticus所做的同样的事情,你必须稍微修改一下你处理第一个变量的方式:

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

我自己做到这一点只是时间问题,但使用这种方法是一个更好的单行解决方案,其中包括修改现有的URI库,仅隔离到控制器所在的位置.适用,并且无需对默认配置进行任何更改(config.php)

$config['uri_protocol'] = "AUTO";
$config['enable_query_strings'] = FALSE;

有了这个,您现在可以使用以下产品:

/controller/method?field=value
/controller/method/?field=value

验证结果:

print_r($_GET); // Array ( [field] => value ) 

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有