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

[已解决] CI框架URL中传中文的解决

[复制链接]
发表于 2012-2-7 11:20:48 | 显示全部楼层 |阅读模式
最近一个项目中需要在url中传中文,在网上看了很多解决方案。
在application/libraries下简历自己的文件MY_URI.php,并继承自system/core下的原生URI类,重写_filter_uri方法:function _filter_uri($str)
    {
        if ($str != '' AND $this->config->item('permitted_uri_chars') != '')
        {
            $str = urlencode($str);
            if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i", $str))
            {
                exit('The URI you submitted has disallowed characters.');
            }
            $str = urldecode($str);
        }
        return $str;
    }  

按照CI操作手册中的说法,当在application/libraries存在自己的类时,CI将使用用户自定义的类,但是为什么CI调用的还是原来的URI类?该如何解决呢?

另外,我把url打印出来,为什么url中的中文是乱码
发表于 2012-2-7 11:30:39 | 显示全部楼层
你是 2.0 以后的版本吧?那要放到 application/core 目录下,你再好好看看手册,呵呵
http://codeigniter.org.cn/user_guide/general/core_classes.html
发表于 2012-2-7 11:39:48 | 显示全部楼层
恩,core目录下。
PHP复制代码
 
class Ex_URI extends CI_URI {
       
        function __construct() {
                parent::__construct();
        }
 
        function _filter_uri($str) {
 
                if ($str != '' && $this->config->item('permitted_uri_chars') != '' && $this->config->item('enable_query_strings') == FALSE)
                {
                        // preg_quote() in PHP 5.3 escapes -, so the str_replace() and addition of - to preg_quote() is to maintain backwards
                        // compatibility as many are unaware of how characters in the permitted_uri_chars will be parsed as a regex pattern
                        $str = urlencode($str);
                        if ( ! preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-'))."]+$|i", $str))
                        {
                                show_error('The URI you submitted has disallowed characters.', 400);
                        }
                        $str = urldecode($str);
                }
 
                // Convert programatic characters to entities
                $bad    = array('$',            '(',            ')',            '%28',          '%29');
                $good   = array('$',        '(',        ')',        '(',        ')');
 
                return str_replace($bad, $good, $str);
        }
}
 
复制代码

 楼主| 发表于 2012-2-7 12:55:06 | 显示全部楼层
Hex 发表于 2012-2-7 11:30
你是 2.0 以后的版本吧?那要放到 application/core 目录下,你再好好看看手册,呵呵
http://codeigniter.o ...

谢谢,放到application/core下,自动加载了
发表于 2012-9-19 21:32:56 | 显示全部楼层
晕,果然这个问题

本版积分规则