CI URI 传递中文问题
来源:互联网 发布:360手机抢购软件 编辑:程序博客网 时间:2024/06/06 09:05
比如下面的路径: http://www.example.com/search/name/中文字符,但是一直报错:Disallowed Key Characters.之前一直以为是system/library/URI.php的问题。不断的去修改系统的
总结:CI过滤URI中的字符有两道防线,第一道防线,是Input.php类里面的_clean_input_keys($str)函数,通过正则匹配,及时卡掉非法字符,第二道防线是URI.php里面的_filter_uri($str),通过系统设定的$config['permitted_uri_chars']来进行正则的匹配。卡掉非法的字符。但是我又感到了CI框架的一个缺陷。就是Input.php和URI.php里面的过滤函数各为其主,采用不同的正则表达式进行匹配,URI.php里面采用的是正统的$config['permitted_uri_chars'],Input.php采用的是固定的”/^[a-z0-9:_\/-]+$/i“。这样,即便在$config['permitted_uri_chars']里面设置了中文的匹配条件,也会在Input.php层被卡掉。
解决办法扩展Input类,将
$config['permitted_uri_chars'] = 'a-z A-Z 0-9~%.:_\-';和URI.php里面的_filter_uri($str)函数无奈之下,搜索这句报错信息的来源,结果发现是在system/library/URI.php里面的_clean_input_keys($str)这个函数,因为中文的编码在这个地方没有通过正则表达式的匹配,只能被无情的挂掉。
总结:CI过滤URI中的字符有两道防线,第一道防线,是Input.php类里面的_clean_input_keys($str)函数,通过正则匹配,及时卡掉非法字符,第二道防线是URI.php里面的_filter_uri($str),通过系统设定的$config['permitted_uri_chars']来进行正则的匹配。卡掉非法的字符。但是我又感到了CI框架的一个缺陷。就是Input.php和URI.php里面的过滤函数各为其主,采用不同的正则表达式进行匹配,URI.php里面采用的是正统的$config['permitted_uri_chars'],Input.php采用的是固定的”/^[a-z0-9:_\/-]+$/i“。这样,即便在$config['permitted_uri_chars']里面设置了中文的匹配条件,也会在Input.php层被卡掉。
解决办法扩展Input类,将
function _clean_input_keys($str) {if ( ! preg_match("/^[a-z0-9:_/-]+$/i", $str)) {exit('Disallowed Key Characters.');}return $str;}改成:
function _clean_input_keys($str) {$config = &get_config('config');if ( ! preg_match("/^[".$config['permitted_uri_chars']."]+$/i", urlencode($str))) {exit('Disallowed Key Characters.');}return $str;}扩展Uri类,将
function _filter_uri($str) {if ($str != '' AND $this->config->item('permitted_uri_chars') != '') {if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i", $str)) {exit('The URI you submitted has disallowed characters.');}}return $str;}改为:
function _filter_uri($str) {if ($str != '' AND $this->config->item('permitted_uri_chars') != '') {if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i", urlencode($str))) {exit('The URI you submitted has disallowed characters.');}}return $str;}
摘自:
http://www.teamwiki.cn/php/codeigniter/ci_uri%E4%BC%A0%E9%80%92%E4%B8%AD%E6%96%87%E9%97%AE%E9%A2%98
- CI URI 传递中文问题
- CI框架中使用URI类segment方法获取url中的中文参数的问题
- Uri 中文乱码问题
- 解决URI中文乱码问题
- CI 框架中将 URI 设置为 PATH_INFO 引发的问题
- ci框架url传递参数出现:The URI you submitted has disallowed characters
- J2ME中文传递问题
- Android Uri带中文乱码问题
- ci可逆加密与uri
- CI中的uri和url
- URL中文参数传递问题
- URL中文参数传递问题
- url传递中文乱码问题
- 页面跳转 传递中文问题
- url传递中文乱码问题
- amfphp传递中文乱码问题
- url传递中文乱码问题
- URL传递中文编码问题
- sql防注入拼装
- UE正则表达式使用
- 关于调试的建议(英文的,翻译稍后就来)
- 摄像机标定过程求解需要多少参数(简略总结)
- 21个有启发的网页设计中的排版例子
- CI URI 传递中文问题
- 解密回声消除技术之一(理论篇)
- The run destination My Mac 64-bit is not valid for Running the scheme '*'
- 寻找中国最好百名产品经理:豆瓣阿北360周鸿祎
- XML介绍之数据岛与解析器
- 第13章 复制控制 (part1) 复制构造函数 & 赋值操作符 & 析构函数
- hdu 1024 Max Sum Plus Plus(dp)
- TextView中添加链接,点击启动另一个Activity
- ICMP(Internet Control Message Protocol)协议[总]