发新话题
打印

[辅助方法 Helper] 关于传递url 中文字符的解决方案(仅供参考)

本主题由 Hex 于 2008-5-16 14:47 移动

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

由于CI 过滤了GET数组及URL字符串,所以在需要使用中文的地方会造成很大的不便。如果不想更改CI源代码又想在URL中传递中文,即使使用url_encode和base64_encode函数也无能为力。那么,能不能改造一下base64编码呢?下面是我的想法:
复制内容到剪贴板
PHP 代码:
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 威望 +5 独辟蹊径 2008-5-16 14:47

TOP

另辟蹊径!!!赞!!!加分
QQ: 49489680
MSN: zhaochang_tj AT hotmail DOT com

TOP

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

TOP

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

TOP

使用最新版
修改  libraries/URI.php其中为
复制内容到剪贴板
TEXT 代码:
        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

TOP

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

TOP

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

TOP

引用:
原帖由 artfantasy 于 2008-5-23 17:38 发表
HEX应该把这问题提到英文官方去,让他们处理这个问题,不然这样绕弯路实在有背自由精神
这个我觉得很不错。
QQ: 49489680
MSN: zhaochang_tj AT hotmail DOT com

TOP

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

TOP

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
不过上面那个 base_encode加密后位数比较后,好用!
原来这里加个 = 号就可解决, 当初都没注意到...
!!!!

TOP

发新话题