qq123 发表于 2008-5-16 13:01:45

关于传递url 中文字符的解决方案(仅供参考)

由于CI 过滤了GET数组及URL字符串,所以在需要使用中文的地方会造成很大的不便。如果不想更改CI源代码又想在URL中传递中文,即使使用url_encode和base64_encode函数也无能为力。那么,能不能改造一下base64编码呢?下面是我的想法:
function base_encode($str)
{
        $src= array("/","+","=");
        $dist = array("-a","-b","-c");
        $old= base64_encode($str);
        $new= str_replace($src,$dist,$old);
        return $new;
}

function base_decode($str)
{
        $src = array("-a","-b","-c");
        $dist= array("/","+","=");
        $old= str_replace($src,$dist,$str);
        $new = base64_decode($old);
        return $new;
}
下面是在浏览器中得到的效果
xOO6w6Osuf65-aiy-atL-b00Ke5-b8jnus6ho6GjoaM-c
你好,哈哈,看看效果如何。。。

Hex 发表于 2008-5-16 14:47:35

另辟蹊径!!!赞!!!加分

artfantasy 发表于 2008-5-23 17:37:32

哈哈,很少用base64,没想到这编码还会出现/和+号,楼主的办法是个好办法,嘿嘿

artfantasy 发表于 2008-5-23 17:38:57

HEX应该把这问题提到英文官方去,让他们处理这个问题,不然这样绕弯路实在有背自由精神

archer 发表于 2008-5-30 19:25:18

使用最新版
修改libraries/URI.php其中为        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.');
                        }
                }
                       
                return $str;
        }在你的控制器函数中获得相应中文字段存取变量中 再urldecode
it's work fine

pp18180058 发表于 2008-5-31 03:34:07

我是encodeurl后把%换成冒号:
看下面的地址
http://www.d500.com.cn/index.php/search/show/:E7:9F:A2:E9:87:8F/all

heroicq 发表于 2008-8-26 12:21:38

楼主,好东东啊,收藏了!

Hex 发表于 2008-8-26 13:38:29

原帖由 artfantasy 于 2008-5-23 17:38 发表 http://codeigniter.org.cn/forums/images/common/back.gif
HEX应该把这问题提到英文官方去,让他们处理这个问题,不然这样绕弯路实在有背自由精神
这个我觉得很不错。

heroicq 发表于 2008-8-27 19:35:14

方法挺好用的啊, 有些用url为数字或字母的, 用urlencode无效,还是原样;
base64_encode会变成错误的url, 即不可读;
上面介绍的方法就解决了这个问题

heroicq 发表于 2008-8-27 19:56:07

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
不过上面那个 base_encode加密后位数比较后,好用!
原来这里加个 = 号就可解决, 当初都没注意到...
页: [1] 2
查看完整版本: 关于传递url 中文字符的解决方案(仅供参考)