用户
 找回密码
 入住 CI 中国社区
搜索
12
返回列表 发新帖
楼主: yadam
收起左侧

[已解决] $this->input->post('中文')不能获得值

  [复制链接]
 楼主| 发表于 2012-2-20 23:16:18 | 显示全部楼层
本帖最后由 yadam 于 2012-2-20 23:17 编辑

经过测试,找到了问题的原因.
CI的文件都是utf-8编码的.而我新建的控制类是用ANSI编码的.这样就导致自定义控制类调用CI中CI_Input类的post()函数时,传递的参数是GBK编码的,当然就没有获得期望的参数,进而发现$_POST没有以这个参数为key的数据.出现了取不到值的现象.

现在解决方案有两个:
1.在调用的时候转换参数编码方式
PHP复制代码
$this->input->post(iconv("gbk", "utf-8", "中文"));
复制代码


2.将新加的文件编码格式改成utf-8,参数正常传递
PHP复制代码
$this->input->post("中文");
复制代码


以上两种方式都可以达到效果.第一种方式不可取,有诸多问题,建议第二种方式.
发表于 2012-2-21 13:30:28 | 显示全部楼层
php数组是支持中文key的
发表于 2012-2-21 15:12:39 | 显示全部楼层
不要用中文key吧。。。中文兼容性永远是大问题,毕竟计算机是外国人发明的。
 楼主| 发表于 2012-2-21 20:46:13 | 显示全部楼层
Hex 发表于 2012-2-21 15:12
不要用中文key吧。。。中文兼容性永远是大问题,毕竟计算机是外国人发明的。 ...

嗯,网页已经都改成是英文的了.但是帖子是问中文的为什么不能取到值.本着初衷,来发这个贴,来说明一下确实是可以用中文的.而不是一句"不能用中文"/"不支持中文". 谢谢指正,以后还得多学习

顺便请教一下:如果name是数据库中的变量名的话会带来什么风险? 这样用合适不?还是用其他的name,然后访问数据库之前做一个key的转换? 谢谢
发表于 2012-2-21 22:14:57 | 显示全部楼层
恩,最好还是不要用中文key,不一定在哪个地方就出现问题了。
发表于 2012-2-23 11:01:16 | 显示全部楼层
yadam 发表于 2012-2-21 20:46
嗯,网页已经都改成是英文的了.但是帖子是问中文的为什么不能取到值.本着初衷,来发这个贴,来说明一下确实 ...

如果 name 没有经过验证就直接入库,那攻击者也可以构建这个 name,轻者导致 SQL 出错,重者导致数据库被攻击。
发表于 2012-3-1 22:36:33 | 显示全部楼层
表单名字没有用中文的吧,我上来一看看懵了
发表于 2012-3-1 22:38:19 | 显示全部楼层
表单名字没有用中文的吧,我上来一看看懵了

本版积分规则