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

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

[复制链接]
发表于 2008-5-16 13:01:45 | 显示全部楼层 |阅读模式
由于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
你好,哈哈,看看效果如何。。。

评分

参与人数 1威望 +5 收起 理由
Hex + 5 独辟蹊径

查看全部评分

发表于 2008-5-16 14:47:35 | 显示全部楼层
另辟蹊径!!!赞!!!加分
发表于 2008-5-23 17:37:32 | 显示全部楼层
哈哈,很少用base64,没想到这编码还会出现/和+号,楼主的办法是个好办法,嘿嘿
发表于 2008-5-23 17:38:57 | 显示全部楼层
HEX应该把这问题提到英文官方去,让他们处理这个问题,不然这样绕弯路实在有背自由精神
发表于 2008-5-30 19:25:18 | 显示全部楼层
使用最新版
修改  libraries/URI.php其中为
  1.         function _filter_uri($str)
  2.         {
  3.                 if ($str != '' AND $this->config->item('permitted_uri_chars') != '')
  4.                 {
  5.                     $str=urlencode($str);
  6.                         if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i", $str))
  7.                         {
  8.                                 exit('The URI you submitted has disallowed characters.');
  9.                         }
  10.                 }
  11.                        
  12.                 return $str;
  13.         }
复制代码
在你的控制器函数中获得相应中文字段存取变量中 再urldecode
it's work fine
发表于 2008-5-31 03:34:07 | 显示全部楼层
我是encodeurl后把%换成冒号:
看下面的地址
http://www.d500.com.cn/index.php ... :9F:A2:E9:87:8F/all
发表于 2008-8-26 12:21:38 | 显示全部楼层
楼主,好东东啊,收藏了!
发表于 2008-8-26 13:38:29 | 显示全部楼层
原帖由 artfantasy 于 2008-5-23 17:38 发表
HEX应该把这问题提到英文官方去,让他们处理这个问题,不然这样绕弯路实在有背自由精神

这个我觉得很不错。
发表于 2008-8-27 19:35:14 | 显示全部楼层
方法挺好用的啊, 有些用url为数字或字母的, 用urlencode无效,还是原样;
base64_encode会变成错误的url, 即不可读;
上面介绍的方法就解决了这个问题
发表于 2008-8-27 19:56:07 | 显示全部楼层
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
不过上面那个 base_encode加密后位数比较后,好用!
原来这里加个 = 号就可解决, 当初都没注意到...

本版积分规则