用户
 找回密码
 入住 CI 中国社区
搜索
查看: 49284|回复: 47
收起左侧

让 CodeIgniter 支持 $_GET

    [复制链接]
发表于 2008-6-16 17:23:11 | 显示全部楼层 |阅读模式
Hex 注:CI 2.0 以上开始支持 GET 了,不需要下面的步骤。

CI默认过滤了$_GET

需要传递get参数时一般直接 /参数一/参数二
详见手册说明:http://codeigniter.org.cn/user_guide/general/controllers.html#passinguri

但是有时候需要传递很长的复杂的url,比如常用的 http://www.nicewords.cn/index.php/controller/method/?backURL=http://baidu.com/blog/hi

这时 这种模式就行不通了。参数中本身的/会与默认的分隔符冲突

解决方案:

1) 在config.php 中,将‘uri_protocol’ 设置为 ‘PATH_INFO’.
PHP复制代码
$config['uri_protocol'] = "PATH_INFO";
复制代码


2) 在需要使用$_GET的之前加:
PHP复制代码
parse_str($_SERVER['QUERY_STRING'], $_GET);
复制代码


这样,形如 index.php/blog/list?parm=hello&page=52 就可以运行了。

官网说明:
http://codeigniter.com/wiki/QUERY_STRING_GET/

评分

参与人数 1威望 +5 收起 理由
Hex + 5 精品文章

查看全部评分

本帖被以下淘专辑推荐:

发表于 2008-6-17 16:07:16 | 显示全部楼层
很不错,支持楼主!!!
发表于 2008-6-18 08:45:09 | 显示全部楼层
好文章,支持.
发表于 2008-7-19 21:29:57 | 显示全部楼层
parse_str
php自身的函数很顶....
发表于 2008-9-4 15:26:24 | 显示全部楼层
发表于 2008-9-18 10:26:39 | 显示全部楼层
顶一下 不错的方法。
发表于 2008-9-18 12:14:12 | 显示全部楼层
好方法。。顶。。。。
发表于 2008-11-27 10:30:04 | 显示全部楼层
我在官網討論區看到一篇很不錯的解法   http://codeigniter.com/forums/viewthread/68698/#389281
他只有二個步驟

1.config.php的設定
   $config['uri_protocol']    = "REQUEST_URI";
   $config['enable_query_strings'] = TRUE;


2.將以下程式存檔,檔名叫MY_URI.php
   存檔路徑    自己的system/application/libraries/ folder

PHP复制代码
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
 
class MY_URI extends CI_URI {
 
    function MY_URI() {
        parent::CI_URI();
    }
 
    // --------------------------------------------------------------------
   
    /**
     * Override the _parse_request_uri method so it allows query strings through
     *
     * @access    private
     * @return    string
     */
 
    function _parse_request_uri()
    {
        if ( ! isset($_SERVER['REQUEST_URI']) OR $_SERVER['REQUEST_URI'] == '')
        {
            return '';
        }
       
        $uri = explode("?",$_SERVER['REQUEST_URI']); // This line is added to the original
        $request_uri = preg_replace("|/(.*)|", "\\\\1", str_replace("\\\\", "/", $uri[0])); // This line changed
        // Everything else is just the same
 
        if ($request_uri == '' OR $request_uri == SELF)
        {
            return '';
        }
       
        $fc_path = FCPATH;        
        if (strpos($request_uri, '?') !== FALSE)
        {
            $fc_path .= '?';
        }
       
        $parsed_uri = explode("/", $request_uri);
               
        $i = 0;
        foreach(explode("/", $fc_path) as $segment)
        {
            if (isset($parsed_uri[$i]) AND $segment == $parsed_uri[$i])
            {
                $i++;
            }
        }
       
        $parsed_uri = implode("/", array_slice($parsed_uri, $i));
       
        if ($parsed_uri != '')
        {
            $parsed_uri = '/'.$parsed_uri;
        }
 
        return $parsed_uri;
    }
 
}
 
?>
复制代码

评分

参与人数 1威望 +3 收起 理由
Hex + 3 精品文章

查看全部评分

发表于 2008-12-26 13:44:57 | 显示全部楼层
非常牛逼,非常娴熟。顶一下入收藏
发表于 2009-4-20 11:56:12 | 显示全部楼层
汗。。。早看到这个就好了。。。。精湛。。。

本版积分规则